Rather than copy/paste the same version string formatting pattern
again, I added new string-based version routines:
/// return the full viewer version as a string like "2.0.0.200030"
const std::string &llGetViewerVersion();
/// return the viewer version as a string like "2.0.0"
const std::string &llGetViewerShortVersion();
/// return the viewer build version as a string, e.g., "200130"
const std::string &llGetViewerBuildVersion();
The URL for the Home side panel is now specified via a new
"HomeSidePanelURL" string in app_settings/settings.xml. This
string supports the following substitutions:
CHANNEL = the channel name for the viewer
VERSION = the full version string for the viewer
LANGUAGE = the current language set in the viewer
AUTH_KEY = the authentication key (see below)
The authentication key is an optional string that is read from the
dictionary of strings returned by login.cgi. If login.cgi returns a
key called "home_sidetray_token", then the value of that key is used
for the AUTH_KEY substitution. This lets the server provide a piece of
blind data that can be passed to the Home panel web page to support
authentication. The viewer does not interpret the token in any way.
This change adds a new module, llviewerhome.{cpp|h} to contain the
model functionality, used by the view module, llpanelhome.{cpp|h}.
The (optional) Grid pulldown on the login screen is now located below
the Starting Location pulldown, rather than below the Last Name text
entry field. The tab order is also now more obvious.
LLFolderView was explicitly passing scroll events back to its
parent LLScrollContainer, which it didn't need to do. It may not have
exhibited an infinite loop before due to bugs in the border width
computations for scroll rectangles. Reviewed with Leyla.
Add 1 pixel of padding to clipping rect computation. I think there is a deeper
problem in the font width computation code, but I don't know where. Opened EXT-3112
for the deeper issue. Reviewed with Leyla.