summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
Diffstat (limited to 'indra')
-rwxr-xr-xindra/newview/app_settings/settings.xml33
-rwxr-xr-xindra/newview/app_settings/settings_per_account.xml2
-rwxr-xr-xindra/newview/llfloaterpreference.cpp13
-rwxr-xr-xindra/newview/llfloaterpreference.h3
-rwxr-xr-xindra/newview/llloginhandler.cpp27
-rwxr-xr-xindra/newview/llpanellogin.cpp372
-rwxr-xr-xindra/newview/llpanellogin.h25
-rwxr-xr-xindra/newview/llstartup.cpp13
-rwxr-xr-xindra/newview/skins/default/textures/textures.xml10
-rw-r--r--indra/newview/skins/default/textures/widgets/PushButton_Login.pngbin0 -> 1485 bytes
-rw-r--r--indra/newview/skins/default/textures/widgets/PushButton_Login_Over.pngbin0 -> 1568 bytes
-rw-r--r--indra/newview/skins/default/textures/widgets/PushButton_Login_Pressed.pngbin0 -> 1569 bytes
-rw-r--r--indra/newview/skins/default/textures/windows/first_login_image_left.pngbin0 -> 311306 bytes
-rw-r--r--indra/newview/skins/default/textures/windows/first_login_image_right.pngbin0 -> 329170 bytes
-rw-r--r--indra/newview/skins/default/textures/windows/login_sl_logo.pngbin0 -> 21797 bytes
-rw-r--r--indra/newview/skins/default/textures/windows/login_sl_logo_small.pngbin0 -> 5978 bytes
-rwxr-xr-xindra/newview/skins/default/xui/en/main_view.xml1
-rwxr-xr-xindra/newview/skins/default/xui/en/panel_login.xml479
-rw-r--r--indra/newview/skins/default/xui/en/panel_login_first.xml265
-rwxr-xr-xindra/newview/skins/default/xui/en/panel_preferences_general.xml63
-rwxr-xr-xindra/newview/skins/default/xui/en/panel_preferences_privacy.xml11
-rwxr-xr-xindra/newview/skins/default/xui/en/widgets/combo_box.xml2
-rwxr-xr-xindra/newview/viewer_manifest.py2
23 files changed, 824 insertions, 497 deletions
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index d39bf6c3c2..ec369f9dd1 100755
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -3569,13 +3569,13 @@
<key>FPSLogFrequency</key>
<map>
<key>Comment</key>
- <string>Seconds between display of FPS in log (0 for never)</string>
+ <string>Seconds between display of FPS in log (0 for never)</string>
<key>Persist</key>
- <integer>1</integer>
+ <integer>1</integer>
<key>Type</key>
- <string>F32</string>
+ <string>F32</string>
<key>Value</key>
- <real>10.0</real>
+ <real>10.0</real>
</map>
<key>FilterItemsMaxTimePerFrameVisible</key>
<map>
@@ -4171,6 +4171,17 @@
<key>Value</key>
<integer>255</integer>
</map>
+ <key>ForceLoginURL</key>
+ <map>
+ <key>Comment</key>
+ <string>Force a specified URL for login page content - used if exists</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string></string>
+ </map>
<key>ForceShowGrid</key>
<map>
<key>Comment</key>
@@ -5293,6 +5304,18 @@
<key>Value</key>
<integer>1</integer>
</map>
+ <key>LoginContentVersion</key>
+ <map>
+ <key>Comment</key>
+ <string>Version of login page web based content to display</string>
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>2</string>
+ </map>
+
<key>LoginSRVTimeout</key>
<map>
<key>Comment</key>
@@ -10002,7 +10025,7 @@
<key>Value</key>
<string>https://jira.secondlife.com/secure/CreateIssueDetails!init.jspa?pid=10610&amp;issuetype=1&amp;environment=[ENVIRONMENT]&amp;customfield_10253=[LOCATION]</string>
</map>
- <key>RevokePermsOnStopAnimation</key>
+ <key>RevokePermsOnStopAnimation</key>
<map>
<key>Comment</key>
<string>Clear animation permssions when choosing "Stop Animating Me"</string>
diff --git a/indra/newview/app_settings/settings_per_account.xml b/indra/newview/app_settings/settings_per_account.xml
index 500151c935..fc6f1f6395 100755
--- a/indra/newview/app_settings/settings_per_account.xml
+++ b/indra/newview/app_settings/settings_per_account.xml
@@ -312,7 +312,7 @@
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
- <integer>0</integer>
+ <integer>1</integer>
</map>
<!-- End of back compatibility settings -->
</map>
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index b50a2e6f85..1846f3c568 100755
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -752,6 +752,16 @@ void LLFloaterPreference::initDoNotDisturbResponse()
}
}
+//static
+void LLFloaterPreference::updateShowFavoritesCheckbox(bool val)
+{
+ LLFloaterPreference* instance = LLFloaterReg::findTypedInstance<LLFloaterPreference>("preferences");
+ if (instance)
+ {
+ instance->getChild<LLUICtrl>("favorites_on_login_check")->setValue(val);
+ }
+}
+
void LLFloaterPreference::setHardwareDefaults()
{
LLFeatureManager::getInstance()->applyRecommendedSettings();
@@ -1602,6 +1612,7 @@ void LLFloaterPreference::setPersonalInfo(const std::string& visibility, bool im
getChildView("chat_font_size")->setEnabled(TRUE);
}
+
void LLFloaterPreference::refreshUI()
{
refresh();
@@ -1889,6 +1900,8 @@ BOOL LLPanelPreference::postBuild()
if (hasChild("favorites_on_login_check", TRUE))
{
getChild<LLCheckBoxCtrl>("favorites_on_login_check")->setCommitCallback(boost::bind(&showFavoritesOnLoginWarning, _1, _2));
+ bool show_favorites_at_login = LLPanelLogin::getShowFavorites();
+ getChild<LLCheckBoxCtrl>("favorites_on_login_check")->setValue(show_favorites_at_login);
}
//////////////////////PanelAdvanced ///////////////////
diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h
index cb180f6f1e..f6a41529e0 100755
--- a/indra/newview/llfloaterpreference.h
+++ b/indra/newview/llfloaterpreference.h
@@ -84,6 +84,9 @@ public:
// translate user's do not disturb response message according to current locale if message is default, otherwise do nothing
static void initDoNotDisturbResponse();
+ // update Show Favorites checkbox
+ static void updateShowFavoritesCheckbox(bool val);
+
void processProperties( void* pData, EAvatarProcessorType type );
void processProfileProperties(const LLAvatarData* pAvatarData );
void storeAvatarProperties( const LLAvatarData* pAvatarData );
diff --git a/indra/newview/llloginhandler.cpp b/indra/newview/llloginhandler.cpp
index 9b4f146332..39f3c0f113 100755
--- a/indra/newview/llloginhandler.cpp
+++ b/indra/newview/llloginhandler.cpp
@@ -96,33 +96,6 @@ bool LLLoginHandler::handle(const LLSD& tokens,
return true;
}
- if (tokens.size() == 1
- && tokens[0].asString() == "show")
- {
- // We're using reg-in-client, so show the XUI login widgets
- LLPanelLogin::showLoginWidgets();
- return true;
- }
-
- if (tokens.size() == 1
- && tokens[0].asString() == "reg")
- {
- LLWindow* window = gViewerWindow->getWindow();
- window->incBusyCount();
- window->setCursor(UI_CURSOR_ARROW);
-
- // Do this first, as it may be slow and we want to keep something
- // on the user's screen as long as possible
- LLWeb::loadURLExternal( "http://join.eniac15.lindenlab.com/" );
-
- window->decBusyCount();
- window->setCursor(UI_CURSOR_ARROW);
-
- // Then hide the window
- window->minimize();
- return true;
- }
-
// Make sure window is visible
LLWindow* window = gViewerWindow->getWindow();
if (window->getMinimized())
diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index 911ecaad9d..9baa443b55 100755
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -82,20 +82,86 @@ const S32 MAX_PASSWORD = 16;
LLPanelLogin *LLPanelLogin::sInstance = NULL;
BOOL LLPanelLogin::sCapslockDidNotification = FALSE;
-class LLLoginRefreshHandler : public LLCommandHandler
+class LLLoginLocationAutoHandler : public LLCommandHandler
{
public:
// don't allow from external browsers
- LLLoginRefreshHandler() : LLCommandHandler("login_refresh", UNTRUSTED_BLOCK) { }
+ LLLoginLocationAutoHandler() : LLCommandHandler("location_login", UNTRUSTED_BLOCK) { }
bool handle(const LLSD& tokens, const LLSD& query_map, LLMediaCtrl* web)
- {
+ {
if (LLStartUp::getStartupState() < STATE_LOGIN_CLEANUP)
{
- LLPanelLogin::loadLoginPage();
- }
+ if ( tokens.size() == 0 || tokens.size() > 4 )
+ return false;
+
+ // unescape is important - uris with spaces are escaped in this code path
+ // (e.g. space -> %20) and the code to log into a region doesn't support that.
+ const std::string region = LLURI::unescape( tokens[0].asString() );
+
+ // just region name as payload
+ if ( tokens.size() == 1 )
+ {
+ // region name only - slurl will end up as center of region
+ LLSLURL slurl(region);
+ LLPanelLogin::autologinToLocation(slurl);
+ }
+ else
+ // region name and x coord as payload
+ if ( tokens.size() == 2 )
+ {
+ // invalid to only specify region and x coordinate
+ // slurl code will revert to same as region only, so do this anyway
+ LLSLURL slurl(region);
+ LLPanelLogin::autologinToLocation(slurl);
+ }
+ else
+ // region name and x/y coord as payload
+ if ( tokens.size() == 3 )
+ {
+ // region and x/y specified - default z to 0
+ F32 xpos;
+ std::istringstream codec(tokens[1].asString());
+ codec >> xpos;
+
+ F32 ypos;
+ codec.clear();
+ codec.str(tokens[2].asString());
+ codec >> ypos;
+
+ const LLVector3 location(xpos, ypos, 0.0f);
+ LLSLURL slurl(region, location);
+
+ LLPanelLogin::autologinToLocation(slurl);
+ }
+ else
+ // region name and x/y/z coord as payload
+ if ( tokens.size() == 4 )
+ {
+ // region and x/y/z specified - ok
+ F32 xpos;
+ std::istringstream codec(tokens[1].asString());
+ codec >> xpos;
+
+ F32 ypos;
+ codec.clear();
+ codec.str(tokens[2].asString());
+ codec >> ypos;
+
+ F32 zpos;
+ codec.clear();
+ codec.str(tokens[3].asString());
+ codec >> zpos;
+
+ const LLVector3 location(xpos, ypos, zpos);
+ LLSLURL slurl(region, location);
+
+ LLPanelLogin::autologinToLocation(slurl);
+ };
+ }
return true;
}
};
+LLLoginLocationAutoHandler gLoginLocationAutoHandler;
//---------------------------------------------------------------------------
// Public methods
@@ -104,10 +170,14 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
void (*callback)(S32 option, void* user_data),
void *cb_data)
: LLPanel(),
- mLogoImage(),
mCallback(callback),
mCallbackData(cb_data),
- mListener(new LLPanelLoginListener(this))
+ mListener(new LLPanelLoginListener(this)),
+ mUsernameLength(0),
+ mPasswordLength(0),
+ mLocationLength(0),
+ mFavoriteSelected(false),
+ mShowFavorites(false)
{
setBackgroundVisible(FALSE);
setBackgroundOpaque(TRUE);
@@ -131,28 +201,37 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
login_holder->addChild(this);
}
- // Logo
- mLogoImage = LLUI::getUIImage("startup_logo");
-
- buildFromFile( "panel_login.xml");
+ if (gSavedSettings.getBOOL("FirstLoginThisInstall"))
+ {
+ buildFromFile( "panel_login_first.xml");
+ }
+ else
+ {
+ buildFromFile( "panel_login.xml");
+ }
reshape(rect.getWidth(), rect.getHeight());
LLLineEditor* password_edit(getChild<LLLineEditor>("password_edit"));
password_edit->setKeystrokeCallback(onPassKey, this);
// STEAM-14: When user presses Enter with this field in focus, initiate login
- password_edit->setCommitCallback(boost::bind(&LLPanelLogin::onClickConnect, this));
+ password_edit->setCommitCallback(boost::bind(&LLPanelLogin::onClickConnectLast, this));
// change z sort of clickable text to be behind buttons
sendChildToBack(getChildView("forgot_password_text"));
- LLComboBox* location_combo = getChild<LLComboBox>("start_location_combo");
+ LLComboBox* favorites_combo = getChild<LLComboBox>("start_location_combo");
updateLocationSelectorsVisibility(); // separate so that it can be called from preferences
- location_combo->setFocusLostCallback(boost::bind(&LLPanelLogin::onLocationSLURL, this));
+ favorites_combo->setFocusLostCallback(boost::bind(&LLPanelLogin::onLocationSLURL, this));
+ favorites_combo->setCommitCallback(boost::bind(&LLPanelLogin::onSelectFavorite, this));
LLComboBox* server_choice_combo = getChild<LLComboBox>("server_combo");
server_choice_combo->setCommitCallback(boost::bind(&LLPanelLogin::onSelectServer, this));
+ LLLineEditor* location_edit = sInstance->getChild<LLLineEditor>("location_edit");
+ location_edit->setKeystrokeCallback(boost::bind(&LLPanelLogin::onLocationEditChanged, this, _1), NULL);
+ location_edit->setCommitCallback(boost::bind(&LLPanelLogin::onClickConnectLocation, this));
+
// Load all of the grids, sorted, and then add a bar and the current grid at the top
server_choice_combo->removeall();
@@ -199,9 +278,12 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
LLPanelLogin::onUpdateStartSLURL(start_slurl); // updates grid if needed
}
- childSetAction("connect_btn", onClickConnect, this);
+ childSetAction("connect_btn", onClickConnectLast, this);
+ childSetAction("connect_favorite_btn", onClickConnectFavorite, this);
+ childSetAction("connect_location_btn", onClickConnectLocation, this);
- getChild<LLPanel>("links_login_panel")->setDefaultBtn("connect_btn");
+ LLButton* def_btn = getChild<LLButton>("connect_btn");
+ setDefaultBtn(def_btn);
std::string channel = LLVersionInfo::getChannel();
std::string version = llformat("%s (%d)",
@@ -211,8 +293,6 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
LLTextBox* forgot_password_text = getChild<LLTextBox>("forgot_password_text");
forgot_password_text->setClickedCallback(onClickForgotPassword, NULL);
- childSetAction("create_new_account_btn", onClickNewAccount, NULL);
-
LLTextBox* need_help_text = getChild<LLTextBox>("login_help");
need_help_text->setClickedCallback(onClickHelp, NULL);
@@ -220,8 +300,6 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
LLMediaCtrl* web_browser = getChild<LLMediaCtrl>("login_html");
web_browser->addObserver(this);
- reshapeBrowser();
-
loadLoginPage();
// Show last logged in user favorites in "Start at" combo.
@@ -240,12 +318,15 @@ void LLPanelLogin::addUsersWithFavoritesToUsername()
LLSD fav_llsd;
llifstream file;
file.open(filename);
- if (!file.is_open()) return;
+ if (!file.is_open())
+ return;
LLSDSerialize::fromXML(fav_llsd, file);
for (LLSD::map_const_iterator iter = fav_llsd.beginMap();
iter != fav_llsd.endMap(); ++iter)
{
combo->add(iter->first);
+ mUsernameLength = iter->first.length();
+ updateLoginButtons();
}
}
@@ -262,12 +343,16 @@ void LLPanelLogin::addFavoritesToStartLocation()
// Load favorites into the combo.
std::string user_defined_name = getChild<LLComboBox>("username_combo")->getSimple();
+ mUsernameLength = user_defined_name.length();
+ updateLoginButtons();
+
std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites.xml");
LLSD fav_llsd;
llifstream file;
file.open(filename);
if (!file.is_open()) return;
LLSDSerialize::fromXML(fav_llsd, file);
+
for (LLSD::map_const_iterator iter = fav_llsd.beginMap();
iter != fav_llsd.endMap(); ++iter)
{
@@ -291,6 +376,7 @@ void LLPanelLogin::addFavoritesToStartLocation()
std::string value = (*iter1)["slurl"].asString();
if(label != "" && value != "")
{
+ mShowFavorites = true;
combo->add(label, value);
}
}
@@ -298,21 +384,6 @@ void LLPanelLogin::addFavoritesToStartLocation()
}
}
-// force the size to be correct (XML doesn't seem to be sufficient to do this)
-// (with some padding so the other login screen doesn't show through)
-void LLPanelLogin::reshapeBrowser()
-{
- LLMediaCtrl* web_browser = getChild<LLMediaCtrl>("login_html");
- LLRect rect = gViewerWindow->getWindowRectScaled();
- LLRect html_rect;
- html_rect.setCenterAndSize(
- rect.getCenterX() - 2, rect.getCenterY() + 40,
- rect.getWidth() + 6, rect.getHeight() - 78 );
- web_browser->setRect( html_rect );
- web_browser->reshape( html_rect.getWidth(), html_rect.getHeight(), TRUE );
- reshape( rect.getWidth(), rect.getHeight(), 1 );
-}
-
LLPanelLogin::~LLPanelLogin()
{
LLPanelLogin::sInstance = NULL;
@@ -322,50 +393,6 @@ LLPanelLogin::~LLPanelLogin()
gFocusMgr.setDefaultKeyboardFocus(NULL);
}
-// virtual
-void LLPanelLogin::draw()
-{
- gGL.pushMatrix();
- {
- F32 image_aspect = 1.333333f;
- F32 view_aspect = (F32)getRect().getWidth() / (F32)getRect().getHeight();
- // stretch image to maintain aspect ratio
- if (image_aspect > view_aspect)
- {
- gGL.translatef(-0.5f * (image_aspect / view_aspect - 1.f) * getRect().getWidth(), 0.f, 0.f);
- gGL.scalef(image_aspect / view_aspect, 1.f, 1.f);
- }
-
- S32 width = getRect().getWidth();
- S32 height = getRect().getHeight();
-
- if (getChild<LLView>("login_widgets")->getVisible())
- {
- // draw a background box in black
- gl_rect_2d( 0, height - 264, width, 264, LLColor4::black );
- // draw the bottom part of the background image
- // just the blue background to the native client UI
- mLogoImage->draw(0, -264, width + 8, mLogoImage->getHeight());
- };
- }
- gGL.popMatrix();
-
- LLPanel::draw();
-}
-
-// virtual
-BOOL LLPanelLogin::handleKeyHere(KEY key, MASK mask)
-{
- if ( KEY_F1 == key )
- {
- LLViewerHelp* vhelp = LLViewerHelp::getInstance();
- vhelp->showTopic(vhelp->f1HelpTopic());
- return TRUE;
- }
-
- return LLPanel::handleKeyHere(key, mask);
-}
-
// virtual
void LLPanelLogin::setFocus(BOOL b)
{
@@ -421,24 +448,6 @@ void LLPanelLogin::giveFocus()
}
// static
-void LLPanelLogin::showLoginWidgets()
-{
- if (sInstance)
- {
- // *NOTE: Mani - This may or may not be obselete code.
- // It seems to be part of the defunct? reg-in-client project.
- sInstance->getChildView("login_widgets")->setVisible( true);
- LLMediaCtrl* web_browser = sInstance->getChild<LLMediaCtrl>("login_html");
- sInstance->reshapeBrowser();
- // *TODO: Append all the usual login parameters, like first_login=Y etc.
- std::string splash_screen_url = LLGridManager::getInstance()->getLoginPage();
- web_browser->navigateTo( splash_screen_url, "text/html" );
- LLUICtrl* username_combo = sInstance->getChild<LLUICtrl>("username_combo");
- username_combo->setFocus(TRUE);
- }
-}
-
-// static
void LLPanelLogin::show(const LLRect &rect,
void (*callback)(S32 option, void* user_data),
void* callback_data)
@@ -501,9 +510,11 @@ void LLPanelLogin::setFields(LLPointer<LLCredential> credential,
// This is a MD5 hex digest of a password.
// We don't actually use the password input field,
// fill it with MAX_PASSWORD characters so we get a
- // nice row of asterixes.
+ // nice row of asterisks.
const std::string filler("123456789!123456");
- sInstance->getChild<LLUICtrl>("password_edit")->setValue(std::string("123456789!123456"));
+ sInstance->getChild<LLUICtrl>("password_edit")->setValue(filler);
+ sInstance->mPasswordLength = filler.length();
+ sInstance->updateLoginButtons();
}
else
{
@@ -636,11 +647,12 @@ void LLPanelLogin::updateLocationSelectorsVisibility()
{
if (sInstance)
{
- BOOL show_start = gSavedSettings.getBOOL("ShowStartLocation");
- sInstance->getChild<LLLayoutPanel>("start_location_panel")->setVisible(show_start);
-
BOOL show_server = gSavedSettings.getBOOL("ForceShowGrid");
- sInstance->getChild<LLLayoutPanel>("grid_panel")->setVisible(show_server);
+ LLComboBox* server_combo = sInstance->getChild<LLComboBox>("server_combo");
+ if ( server_combo )
+ {
+ server_combo->setVisible(show_server);
+ }
}
}
@@ -652,6 +664,7 @@ void LLPanelLogin::onUpdateStartSLURL(const LLSLURL& new_start_slurl)
LL_DEBUGS("AppInit")<<new_start_slurl.asString()<<LL_ENDL;
LLComboBox* location_combo = sInstance->getChild<LLComboBox>("start_location_combo");
+ LLLineEditor* location_edit = sInstance->getChild<LLLineEditor>("location_edit");
/*
* Determine whether or not the new_start_slurl modifies the grid.
*
@@ -681,7 +694,12 @@ void LLPanelLogin::onUpdateStartSLURL(const LLSLURL& new_start_slurl)
updateServer(); // to change the links and splash screen
}
- location_combo->setTextEntry(new_start_slurl.getLocationString());
+ if ( new_start_slurl.getLocationString().length() )
+ {
+ location_edit->setValue(new_start_slurl.getLocationString());
+ sInstance->mLocationLength = new_start_slurl.getLocationString().length();
+ sInstance->updateLoginButtons();
+ }
}
else
{
@@ -694,16 +712,12 @@ void LLPanelLogin::onUpdateStartSLURL(const LLSLURL& new_start_slurl)
break;
case LLSLURL::HOME_LOCATION:
- location_combo->setCurrentByIndex(1); // home location
- break;
-
- case LLSLURL::LAST_LOCATION:
- location_combo->setCurrentByIndex(0); // last location
+ //location_combo->setCurrentByIndex(0); // home location
break;
default:
LL_WARNS("AppInit")<<"invalid login slurl, using home"<<LL_ENDL;
- location_combo->setCurrentByIndex(1); // home location
+ //location_combo->setCurrentByIndex(0); // home location
break;
}
}
@@ -714,6 +728,19 @@ void LLPanelLogin::setLocation(const LLSLURL& slurl)
LLStartUp::setStartSLURL(slurl); // calls onUpdateStartSLURL, above
}
+void LLPanelLogin::autologinToLocation(const LLSLURL& slurl)
+{
+ LL_DEBUGS("AppInit")<<"automatically logging into Location "<<slurl.asString()<<LL_ENDL;
+ LLStartUp::setStartSLURL(slurl); // calls onUpdateStartSLURL, above
+
+ if ( LLPanelLogin::sInstance != NULL )
+ {
+ void* unused_parameter = 0;
+ LLPanelLogin::sInstance->onClickConnect(unused_parameter);
+ }
+}
+
+
// static
void LLPanelLogin::closePanel()
{
@@ -751,6 +778,13 @@ void LLPanelLogin::loadLoginPage()
LL_DEBUGS("AppInit") << "login_page: " << login_page << LL_ENDL;
+ // allow users (testers really) to specify a different login content URL
+ std::string force_login_url = gSavedSettings.getString("ForceLoginURL");
+ if ( force_login_url.length() > 0 )
+ {
+ login_page = LLURI(force_login_url);
+ }
+
// Language
params["lang"] = LLUI::getLanguage();
@@ -775,6 +809,9 @@ void LLPanelLogin::loadLoginPage()
// sourceid
params["sourceid"] = gSavedSettings.getString("sourceid");
+ // login page (web) content version
+ params["login_content_version"] = gSavedSettings.getString("LoginContentVersion");
+
// Make an LLURI with this augmented info
LLURI login_uri(LLURI::buildHTTP(login_page.authority(),
login_page.path(),
@@ -785,7 +822,7 @@ void LLPanelLogin::loadLoginPage()
LLMediaCtrl* web_browser = sInstance->getChild<LLMediaCtrl>("login_html");
if (web_browser->getCurrentNavUrl() != login_uri.asString())
{
- LL_DEBUGS("AppInit") << "loading: " << login_uri << LL_ENDL;
+ llinfos << "login page loading: " << login_uri << llendl;
web_browser->navigateTo( login_uri.asString(), "text/html" );
}
}
@@ -797,6 +834,32 @@ void LLPanelLogin::handleMediaEvent(LLPluginClassMedia* /*self*/, EMediaEvent ev
//---------------------------------------------------------------------------
// Protected methods
//---------------------------------------------------------------------------
+// static
+void LLPanelLogin::onClickConnectLast(void *)
+{
+ std::string location = LLSLURL::SIM_LOCATION_LAST;
+ LLStartUp::setStartSLURL(location);
+
+ void* unused_parameter = 0;
+ LLPanelLogin::sInstance->onClickConnect(unused_parameter);
+}
+
+void LLPanelLogin::onClickConnectFavorite(void *)
+{
+ LLPanelLogin::sInstance->onLocationSLURL();
+
+ void* unused_parameter = 0;
+ LLPanelLogin::sInstance->onClickConnect(unused_parameter);
+}
+
+void LLPanelLogin::onClickConnectLocation(void *)
+{
+ std::string location = sInstance->getChild<LLUICtrl>("location_edit")->getValue().asString();
+ LLStartUp::setStartSLURL(location);
+
+ void* unused_parameter = 0;
+ LLPanelLogin::sInstance->onClickConnect(unused_parameter);
+}
// static
void LLPanelLogin::onClickConnect(void *)
@@ -866,16 +929,6 @@ void LLPanelLogin::onClickConnect(void *)
}
// static
-void LLPanelLogin::onClickNewAccount(void*)
-{
- if (sInstance)
- {
- LLWeb::loadURLExternal(LLTrans::getString("create_account_url"));
- }
-}
-
-
-// static
void LLPanelLogin::onClickVersion(void*)
{
LLFloaterReg::showInstance("sl_about");
@@ -903,13 +956,17 @@ void LLPanelLogin::onClickHelp(void*)
// static
void LLPanelLogin::onPassKey(LLLineEditor* caller, void* user_data)
{
- LLPanelLogin *This = (LLPanelLogin *) user_data;
- This->mPasswordModified = TRUE;
+ LLPanelLogin *self = (LLPanelLogin *)user_data;
+ self->mPasswordModified = TRUE;
if (gKeyboard->getKeyDown(KEY_CAPSLOCK) && sCapslockDidNotification == FALSE)
{
// *TODO: use another way to notify user about enabled caps lock, see EXT-6858
sCapslockDidNotification = TRUE;
}
+
+ LLLineEditor* password_edit(self->getChild<LLLineEditor>("password_edit"));
+ self->mPasswordLength = password_edit->getText().length();
+ self->updateLoginButtons();
}
@@ -950,12 +1007,70 @@ void LLPanelLogin::updateServer()
}
}
+void LLPanelLogin::updateLoginButtons()
+{
+ LLButton* last_login_btn = getChild<LLButton>("connect_btn");
+ LLButton* loc_btn = getChild<LLButton>("connect_location_btn");
+ LLButton* fav_btn = getChild<LLButton>("connect_favorite_btn");
+
+ // no username or no password - turn all buttons off
+ if ( mUsernameLength == 0 || mPasswordLength == 0 )
+ {
+ last_login_btn->setEnabled(false);
+ loc_btn->setEnabled(false);
+ fav_btn->setEnabled(false);
+ };
+
+ // we have a username and a password
+ if ( mUsernameLength != 0 && mPasswordLength != 0 )
+ {
+ // last login button always enabled for this case
+ last_login_btn->setEnabled(true);
+
+ // double check status of favorites combo (must be items there and one must be selected to enable button)
+ LLComboBox* favorites_combo = getChild<LLComboBox>("start_location_combo");
+ int num_items = favorites_combo->getItemCount();
+ int selected_index = favorites_combo->getCurrentIndex();
+ if ( num_items > 0 && selected_index >=0 )
+ mFavoriteSelected = true;
+ else
+ mFavoriteSelected = false;
+
+ // only turn on favorites login button if one is selected
+ fav_btn->setEnabled( mFavoriteSelected );
+
+ // only enable location login if there is content there
+ if ( mLocationLength > 0 )
+ loc_btn->setEnabled(true);
+ else
+ loc_btn->setEnabled(false);
+ }
+}
+
+void LLPanelLogin::onLocationEditChanged(LLUICtrl* ctrl)
+{
+ LLLineEditor* self = (LLLineEditor*)ctrl;
+ if (self )
+ {
+ mLocationLength = self->getText().length();
+ updateLoginButtons();
+ }
+}
+
+void LLPanelLogin::onSelectFavorite()
+{
+ // no way to unselect a favorite once it's selected (i think)
+ mFavoriteSelected = true;
+
+ updateLoginButtons();
+}
+
void LLPanelLogin::onSelectServer()
{
// The user twiddled with the grid choice ui.
// apply the selection to the grid setting.
LLPointer<LLCredential> credential;
-
+
LLComboBox* server_combo = getChild<LLComboBox>("server_combo");
LLSD server_combo_val = server_combo->getSelectedValue();
LL_INFOS("AppInit") << "grid "<<server_combo_val.asString()<< LL_ENDL;
@@ -991,6 +1106,7 @@ void LLPanelLogin::onSelectServer()
// the grid specified by the location is not this one, so clear the combo
location_combo->setCurrentByIndex(0); // last location on the new grid
location_combo->setTextEntry(LLStringUtil::null);
+ mFavoriteSelected = true;
}
}
break;
@@ -1007,3 +1123,9 @@ void LLPanelLogin::onLocationSLURL()
LLStartUp::setStartSLURL(location); // calls onUpdateStartSLURL, above
}
+
+// static
+bool LLPanelLogin::getShowFavorites()
+{
+ return sInstance->mShowFavorites;
+}
diff --git a/indra/newview/llpanellogin.h b/indra/newview/llpanellogin.h
index c71cfc3783..0e68ae3ccf 100755
--- a/indra/newview/llpanellogin.h
+++ b/indra/newview/llpanellogin.h
@@ -49,14 +49,8 @@ public:
void *callback_data);
~LLPanelLogin();
- virtual BOOL handleKeyHere(KEY key, MASK mask);
- virtual void draw();
virtual void setFocus( BOOL b );
- // Show the XUI first name, last name, and password widgets. They are
- // hidden on startup for reg-in-client
- static void showLoginWidgets();
-
static void show(const LLRect &rect,
void (*callback)(S32 option, void* user_data),
void* callback_data);
@@ -67,6 +61,7 @@ public:
static BOOL areCredentialFieldsDirty();
static void setLocation(const LLSLURL& slurl);
+ static void autologinToLocation(const LLSLURL& slurl);
/// Call when preferences that control visibility may have changed
static void updateLocationSelectorsVisibility();
@@ -86,14 +81,21 @@ public:
/// to be called from LLStartUp::setStartSLURL
static void onUpdateStartSLURL(const LLSLURL& new_start_slurl);
+ // called from prefs when initializing panel
+ static bool getShowFavorites();
+
private:
friend class LLPanelLoginListener;
- void reshapeBrowser();
void addFavoritesToStartLocation();
void addUsersWithFavoritesToUsername();
+ void onLocationEditChanged(LLUICtrl* ctrl);
+ void onSelectFavorite();
void onSelectServer();
void onLocationSLURL();
+ static void onClickConnectLast(void*);
+ static void onClickConnectFavorite(void*);
+ static void onClickConnectLocation(void*);
static void onClickConnect(void*);
static void onClickNewAccount(void*);
static void onClickVersion(void*);
@@ -103,16 +105,23 @@ private:
static void updateServerCombo();
private:
- LLPointer<LLUIImage> mLogoImage;
boost::scoped_ptr<LLPanelLoginListener> mListener;
+ void updateLoginButtons();
+
void (*mCallback)(S32 option, void *userdata);
void* mCallbackData;
BOOL mPasswordModified;
+ bool mShowFavorites;
static LLPanelLogin* sInstance;
static BOOL sCapslockDidNotification;
+ bool mFirstLoginThisInstall;
+ bool mFavoriteSelected;
+ unsigned int mUsernameLength;
+ unsigned int mPasswordLength;
+ unsigned int mLocationLength;
};
#endif
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index d4b3fcf28a..f1881961d6 100755
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -1878,19 +1878,6 @@ bool idle_startup()
display_startup();
- // based on the comments, we've successfully logged in so we can delete the 'forced'
- // URL that the updater set in settings.ini (in a mostly paranoid fashion)
- std::string nextLoginLocation = gSavedSettings.getString( "NextLoginLocation" );
- if ( nextLoginLocation.length() )
- {
- // clear it
- gSavedSettings.setString( "NextLoginLocation", "" );
-
- // and make sure it's saved
- gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile") , TRUE );
- LLUIColorTable::instance().saveUserSettings();
- };
-
display_startup();
// JC: Initializing audio requests many sounds for download.
init_audio();
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index 94c187e21a..c563726c85 100755
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -486,6 +486,11 @@ with the same filename but different name
<texture name="PushButton_Selected_Press" file_name="widgets/PushButton_Selected_Press.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" />
<texture name="PushButton_Selected_Disabled" file_name="widgets/PushButton_Selected_Disabled.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" />
+ <texture name="PushButton_Login" file_name="widgets/PushButton_Login.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" />
+ <texture name="PushButton_Login_Over" file_name="widgets/PushButton_Login_Over.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" />
+ <texture name="PushButton_Login_Pressed" file_name="widgets/PushButton_Login_Pressed.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" />
+
+
<texture name="RadioButton_Press" file_name="widgets/RadioButton_Press.png" preload="true" />
<texture name="RadioButton_On_Press" file_name="widgets/RadioButton_On_Press.png" preload="true" />
<texture name="RadioButton_Off" file_name="widgets/RadioButton_Off.png" preload="true" />
@@ -574,6 +579,11 @@ with the same filename but different name
<texture name="startup_logo" file_name="windows/startup_logo.png" preload="true" />
+ <texture name="login_sl_logo" file_name="windows/login_sl_logo.png" preload="true" />
+ <texture name="login_sl_logo_small" file_name="windows/login_sl_logo_small.png" preload="true" />
+ <texture name="first_login_image_left" file_name="windows/first_login_image_left.png" preload="true" />
+ <texture name="first_login_image_right" file_name="windows/first_login_image_right.png" preload="true" />
+
<texture name="Stepper_Down_Off" file_name="widgets/Stepper_Down_Off.png" preload="false" />
<texture name="Stepper_Down_Press" file_name="widgets/Stepper_Down_Press.png" preload="false" />
<texture name="Stepper_Up_Off" file_name="widgets/Stepper_Up_Off.png" preload="false" />
diff --git a/indra/newview/skins/default/textures/widgets/PushButton_Login.png b/indra/newview/skins/default/textures/widgets/PushButton_Login.png
new file mode 100644
index 0000000000..6f8b5a0770
--- /dev/null
+++ b/indra/newview/skins/default/textures/widgets/PushButton_Login.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/widgets/PushButton_Login_Over.png b/indra/newview/skins/default/textures/widgets/PushButton_Login_Over.png
new file mode 100644
index 0000000000..e9e8af13d4
--- /dev/null
+++ b/indra/newview/skins/default/textures/widgets/PushButton_Login_Over.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/widgets/PushButton_Login_Pressed.png b/indra/newview/skins/default/textures/widgets/PushButton_Login_Pressed.png
new file mode 100644
index 0000000000..4a9f1052b3
--- /dev/null
+++ b/indra/newview/skins/default/textures/widgets/PushButton_Login_Pressed.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/windows/first_login_image_left.png b/indra/newview/skins/default/textures/windows/first_login_image_left.png
new file mode 100644
index 0000000000..b405a88245
--- /dev/null
+++ b/indra/newview/skins/default/textures/windows/first_login_image_left.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/windows/first_login_image_right.png b/indra/newview/skins/default/textures/windows/first_login_image_right.png
new file mode 100644
index 0000000000..22a6dd8a53
--- /dev/null
+++ b/indra/newview/skins/default/textures/windows/first_login_image_right.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/windows/login_sl_logo.png b/indra/newview/skins/default/textures/windows/login_sl_logo.png
new file mode 100644
index 0000000000..9810d00237
--- /dev/null
+++ b/indra/newview/skins/default/textures/windows/login_sl_logo.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/windows/login_sl_logo_small.png b/indra/newview/skins/default/textures/windows/login_sl_logo_small.png
new file mode 100644
index 0000000000..0a245442d5
--- /dev/null
+++ b/indra/newview/skins/default/textures/windows/login_sl_logo_small.png
Binary files differ
diff --git a/indra/newview/skins/default/xui/en/main_view.xml b/indra/newview/skins/default/xui/en/main_view.xml
index a87027a113..9885e37cea 100755
--- a/indra/newview/skins/default/xui/en/main_view.xml
+++ b/indra/newview/skins/default/xui/en/main_view.xml
@@ -68,6 +68,7 @@
left="0"
follows="all"
height="500"
+ layout="topleft"
mouse_opaque="false"
name="login_panel_holder"
width="1024"/>
diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml
index 134ca75018..4893eeafb1 100755
--- a/indra/newview/skins/default/xui/en/panel_login.xml
+++ b/indra/newview/skins/default/xui/en/panel_login.xml
@@ -1,265 +1,214 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel
- follows="all"
- height="600"
- layout="topleft"
- left="0"
- name="panel_login"
- focus_root="true"
- top="600"
- width="1130">
- <string name="reg_in_client_url" translate="false">
- http://secondlife.eniac15.lindenlab.com/reg-in-client/
- </string>
- <panel.string
- name="forgot_password_url">
- http://secondlife.com/account/request.php
- </panel.string>
- <!-- *NOTE: Custom resize logic for login_html in llpanellogin.cpp -->
- <web_browser
- tab_stop="false"
- trusted_content="true"
- bg_opaque_color="Black"
- border_visible="false"
- bottom="600"
- follows="all"
- left="0"
- name="login_html"
- start_url=""
- top="0"
- height="600"
- width="996"/>
- <layout_stack
- animate="false"
- clip="false"
- follows="left|bottom|right"
- name="login_widgets"
- layout="topleft"
- orientation="horizontal"
- top="519"
- width="1130"
- height="80">
- <layout_panel
- auto_resize="false"
- follows="left|bottom"
- name="login"
- layout="topleft"
- width="310"
- min_width="310"
- height="80">
- <text
- follows="left|bottom"
- font="SansSerif"
- font.style="BOLD"
- font.size="Large"
- height="16"
- name="log_in_text"
- top="8"
- left="15"
- width="150">
- LOG IN
- </text>
- <text
- follows="left|bottom"
- font="SansSerifSmall"
- height="16"
- name="username_text"
- top="35"
- left="15"
- width="150">
- Username:
- </text>
- <!-- STEAM-14: Turn off commit_on_focus_lost so if user presses Enter
- with focus in this combo_box, we can use commit action to initiate
- login -->
- <combo_box
- allow_text_entry="true"
- follows="left|bottom"
- height="22"
- left_delta="0"
- max_chars="128"
- commit_on_focus_lost="false"
- combo_editor.prevalidate_callback="ascii"
- tool_tip="The username you chose when you registered, like bobsmith12 or Steller Sunshine"
- top_pad="0"
- name="username_combo"
- width="178">
-<!-- empirically, displayed width is 150 anyway?!? -->
- <combo_box.combo_button
- visible ="false"/>
- <combo_box.drop_down_button
- visible ="false"/>
- </combo_box>
-<!-- left="175" based on actual "username_combo" width of 150 vs. 178 -->
- <text
- follows="left|bottom"
- font="SansSerifSmall"
- height="16"
- name="password_text"
- top="35"
- left="175"
- width="150">
- Password:
- </text>
- <!-- STEAM-14: Turn off commit_on_focus_lost so if user presses Enter
- with focus in this line_editor, we can use commit action to
- initiate login -->
- <line_editor
- follows="left|bottom"
- height="22"
- max_length_bytes="16"
- name="password_edit"
- is_password="true"
- select_on_focus="true"
- commit_on_focus_lost="false"
- top_pad="0"
- width="135" />
- </layout_panel>
- <layout_panel
- auto_resize="false"
- follows="left|bottom"
- name="start_location_panel"
- layout="topleft"
- width="175"
- min_width="175"
- height="80">
- <text
- follows="left|bottom"
- font="SansSerifSmall"
- height="16"
- left="10"
- name="start_location_text"
- top="35"
- width="130">
- Start at:
- </text>
- <combo_box
- allow_text_entry="true"
- control_name="NextLoginLocation"
- follows="left|bottom"
- height="22"
- max_chars="128"
- top_pad="0"
- name="start_location_combo"
- width="165">
- <combo_box.item
- label="My last location"
- name="MyLastLocation"
- value="last" />
- <combo_box.item
- label="My home"
- name="MyHome"
- value="home" />
- <combo_box.item
- label="&lt;Type region name&gt;"
- name="Typeregionname" value="" />
- </combo_box>
- </layout_panel>
- <layout_panel
- auto_resize="false"
- follows="left|bottom"
- name="grid_panel"
- layout="topleft"
- width="145"
- height="80"
- visible="false">
- <combo_box
- allow_text_entry="false"
- font="SansSerifSmall"
- follows="left|right|bottom"
- height="23"
- max_chars="256"
- left="10"
- top="51"
- layout="topleft"
- top_pad="2"
- name="server_combo"
- width="135" />
- </layout_panel>
- <layout_panel
- auto_resize="false"
- follows="left|bottom"
- name="links_login_panel"
- layout="topleft"
- width="290"
- height="80">
- <text
- follows="left|bottom"
- font="SansSerifSmall"
- text_color="EmphasisColor"
- left="10"
- height="16"
- name="login_help"
- top="19"
- width="280">
- Need help logging in?
- </text>
- <text
- follows="left|bottom"
- font="SansSerifSmall"
- text_color="EmphasisColor"
- height="16"
- name="forgot_password_text"
- top="35"
- width="280">
- Forgot your username or password?
- </text>
- <button
- follows="left|bottom"
- top_pad="0"
- height="23"
- image_unselected="PushButton_On"
- image_selected="PushButton_On_Selected"
- label="Log In"
- label_color="White"
- layout="topleft"
- name="connect_btn"
- width="90" />
- <check_box
- control_name="RememberPassword"
- follows="left|bottom"
- font="SansSerifSmall"
- left="110"
- top="56"
- height="16"
- label="Remember password"
- top_pad="3"
- name="remember_check"
- width="145" />
- </layout_panel>
- <layout_panel
- tab_stop="false"
- follows="right|bottom"
- name="links"
- width="210"
- min_width="100"
- height="80">
- <text
- follows="right|bottom"
- font="SansSerif"
- font.style="BOLD"
- font.size="Large"
- halign="right"
- height="16"
- name="create_account_text"
- top="8"
- right="-15"
- width="200">
- CREATE YOUR ACCOUNT
- </text>
- <button
- follows="right|bottom"
- top="35"
- right="-15"
- height="23"
- image_unselected="PushButton_On"
- image_selected="PushButton_On_Selected"
- label="Start now"
- label_color="White"
- layout="topleft"
- left_pad="10"
- name="create_new_account_btn"
- width="90" />
- </layout_panel>
- </layout_stack>
-</panel>
+<panel
+ follows="all"
+ height="768"
+ layout="topleft"
+ name="panel_login"
+ focus_root="true"
+ background_visible="true"
+ bg_opaque_color="0.16 0.16 0.16 1"
+ background_opaque="true"
+ width="1024">
+ <panel.string
+ name="forgot_password_url">
+ http://secondlife.com/account/request.php
+ </panel.string>
+ <layout_stack
+ follows="left|right|top"
+ height="172"
+ min_height="172"
+ left="0"
+ name="ui_stack"
+ orientation="horizontal"
+ top="0"
+ width="1024">
+ <layout_panel
+ height="172"
+ auto_resize="true"
+ name="ui_elastic_pad_left"
+ width="32" />
+ <layout_panel
+ auto_resize="false"
+ follows="left|right|top"
+ name="ui_container"
+ width="960"
+ left="0"
+ top="0"
+ height="172">
+ <icon
+ height="73"
+ width="165"
+ image_name="login_sl_logo"
+ left="0"
+ top="25"
+ name="sl_logo_small" />
+ <combo_box
+ left_pad="22"
+ bottom_delta="-7"
+ allow_text_entry="true"
+ follows="left|top"
+ height="32"
+ label="Username"
+ combo_editor.font="SansSerifLarge"
+ max_chars="128"
+ commit_on_focus_lost="false"
+ combo_editor.prevalidate_callback="ascii"
+ tool_tip="The username you chose when you registered, like bobsmith12 or Steller Sunshine"
+ name="username_combo"
+ width="232">
+ <combo_box.combo_editor
+ text_pad_left="8" />
+ <combo_box.combo_button
+ visible="false" />
+ <combo_box.drop_down_button
+ visible="false" />
+ </combo_box>
+ <line_editor
+ follows="left|top"
+ height="32"
+ left_pad="0"
+ max_length_bytes="16"
+ text_pad_left="8"
+ name="password_edit"
+ label="Password"
+ font="SansSerifLarge"
+ is_password="true"
+ select_on_focus="true"
+ commit_on_focus_lost="false"
+ bottom_delta="0"
+ width="200" />
+ <check_box
+ control_name="RememberPassword"
+ follows="left|top"
+ font="SansSerifMedium"
+ left_pad="20"
+ bottom_delta="-14"
+ height="24"
+ label="Remember me"
+ check_button.bottom="3"
+ name="remember_check"
+ width="145" />
+ <text
+ follows="left|top"
+ font="SansSerifMedium"
+ text_color="EmphasisColor"
+ height="16"
+ name="forgot_password_text"
+ left_delta="0"
+ bottom_delta="16"
+ width="200">
+ Forgotten password
+ </text>
+ <button
+ follows="left|top"
+ image_unselected="PushButton_Login"
+ image_pressed="PushButton_Login_Pressed"
+ image_hover="PushButton_Login_Over"
+ label="Log In"
+ label_color="White"
+ font="SansSerifMedium"
+ name="connect_btn"
+ enabled="true"
+ left="0"
+ width="80"
+ height="26"
+ bottom_delta="44" />
+ <text
+ follows="left|top"
+ font="SansSerifLarge"
+ height="24"
+ name="At_My_Last_Location_Label"
+ left_pad="8"
+ bottom_delta="1"
+ width="120">
+ at last location
+ </text>
+ <combo_box
+ control_name="NextLoginLocation"
+ follows="left|top"
+ label="My favorite places"
+ height="26"
+ max_chars="128"
+ combo_editor.font="SansSerifMedium"
+ left_pad="20"
+ bottom_delta="0"
+ name="start_location_combo"
+ width="175"
+ combo_button.scale_image="true">
+ <combo_box.item
+ label="My home"
+ name="MyHome"
+ value="home" />
+ </combo_box>
+ <button
+ follows="left|top"
+ image_unselected="PushButton_Login"
+ image_pressed="PushButton_Login_Pressed"
+ image_hover="PushButton_Login_Over"
+ label="Log In"
+ label_color="White"
+ font="SansSerifMedium"
+ name="connect_favorite_btn"
+ left_pad="8"
+ width="80"
+ enabled="false"
+ height="26"
+ bottom_delta="0" />
+ <line_editor
+ follows="left|top"
+ width="170"
+ height="26"
+ left_pad="40"
+ text_pad_left="8"
+ name="location_edit"
+ label="Type a location"
+ font="SansSerifMedium"
+ select_on_focus="true"
+ commit_on_focus_lost="false"
+ bottom_delta="0" />
+ <button
+ follows="left|top"
+ image_unselected="PushButton_Login"
+ image_pressed="PushButton_Login_Pressed"
+ image_hover="PushButton_Login_Over"
+ label="Log In"
+ enabled="false"
+ label_color="White"
+ font="SansSerifMedium"
+ name="connect_location_btn"
+ left_pad="8"
+ width="80"
+ height="26"
+ bottom_delta="0" />
+ <combo_box
+ allow_text_entry="false"
+ font="SansSerifTiny"
+ follows="left|top"
+ height="26"
+ max_chars="128"
+ label="Select grid"
+ left_pad="40"
+ bottom_delta="0"
+ layout="topleft"
+ top_pad="2"
+ name="server_combo"
+ width="128" />
+ </layout_panel>
+ <layout_panel
+ height="172"
+ auto_resize="true"
+ name="ui_elastic_pad_right"
+ width="32" />
+ </layout_stack>
+ <web_browser
+ tab_stop="false"
+ trusted_content="true"
+ bg_opaque_color="Black"
+ border_visible="false"
+ follows="all"
+ left="0"
+ name="login_html"
+ start_url=""
+ top="154"
+ height="600"
+ width="1024" />
+</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_login_first.xml b/indra/newview/skins/default/xui/en/panel_login_first.xml
new file mode 100644
index 0000000000..0c67103e58
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_login_first.xml
@@ -0,0 +1,265 @@
+<panel
+ follows="all"
+ height="768"
+ layout="topleft"
+ name="panel_login"
+ focus_root="true"
+ background_visible="true"
+ bg_opaque_color="0.16 0.16 0.16 1"
+ background_opaque="true"
+ width="1024">
+ <panel.string
+ name="forgot_password_url">
+ http://secondlife.com/account/request.php
+ </panel.string>
+ <layout_stack
+ follows="left|right|top|bottom"
+ width="1024"
+ height="768"
+ left="0"
+ name="logo_stack"
+ orientation="vertical"
+ top="0">
+ <layout_panel
+ height="18"
+ auto_resize="false"
+ name="page_top"
+ width="1024" />
+ <!-- start of logo stack -->
+ <layout_panel
+ height="130"
+ min_height="10"
+ auto_resize="false"
+ name="parent_panel"
+ width="1024">
+ <layout_stack
+ follows="left|right|top|bottom"
+ height="100"
+ left="0"
+ name="logo_stack"
+ orientation="horizontal"
+ top="0"
+ width="1024">
+ <layout_panel
+ height="110"
+ min_height="10"
+ auto_resize="true"
+ name="logo_left"
+ width="300" />
+ <layout_panel
+ auto_resize="false"
+ follows="left|right|top"
+ name="logo_container"
+ width="225"
+ left="0"
+ top="0"
+ height="105">
+ <icon
+ height="94"
+ image_name="login_sl_logo"
+ left="0"
+ name="sl_logo"
+ top="0" />
+ </layout_panel>
+ <layout_panel
+ height="100"
+ name="logo_right"
+ auto_resize="true"
+ width="300" />
+ </layout_stack>
+ </layout_panel>
+ <!-- end of logo stack -->
+ <!-- start of widget stack -->
+ <layout_panel
+ height="100"
+ min_height="10"
+ auto_resize="false"
+ name="parent_panel2"
+ width="1024">
+ <layout_stack
+ follows="left|right|top|bottom"
+ height="80"
+ left="0"
+ name="widget_stack"
+ orientation="horizontal"
+ top="0"
+ width="1024">
+ <layout_panel
+ height="80"
+ min_height="10"
+ auto_resize="true"
+ name="widget_left"
+ width="200" />
+ <layout_panel
+ auto_resize="false"
+ follows="left|right|top"
+ name="widget_container"
+ width="532"
+ left="0"
+ top="0"
+ height="80">
+ <combo_box
+ allow_text_entry="true"
+ follows="left|bottom"
+ height="32"
+ left="0"
+ label="Username"
+ combo_editor.font="SansSerifLarge"
+ max_chars="128"
+ top="0"
+ commit_on_focus_lost="false"
+ combo_editor.prevalidate_callback="ascii"
+ tool_tip="The username you chose when you registered, like bobsmith12 or Steller Sunshine"
+ name="username_combo"
+ width="232">
+ <combo_box.combo_editor
+ text_pad_left="8" />
+ <combo_box.combo_button
+ visible ="false"/>
+ <combo_box.drop_down_button
+ visible ="false"/>
+ </combo_box>
+ <line_editor
+ follows="left|top"
+ width="200"
+ height="32"
+ left="220"
+ max_length_bytes="16"
+ name="password_edit"
+ label="Password"
+ text_pad_left="8"
+ font="SansSerifLarge"
+ is_password="true"
+ select_on_focus="true"
+ commit_on_focus_lost="false"
+ top="0" />
+ <button
+ follows="left|top"
+ image_unselected="PushButton_Login"
+ image_pressed="PushButton_Login_Pressed"
+ image_hover="PushButton_Login_Over"
+ label="Log In"
+ label_color="White"
+ font="SansSerifLarge"
+ name="connect_btn"
+ left="432"
+ width="100"
+ height="32"
+ top="0" />
+ <check_box
+ control_name="RememberPassword"
+ follows="left|top"
+ font="SansSerifLarge"
+ left="0"
+ top="32"
+ height="24"
+ label="Remember me"
+ check_button.bottom="3"
+ name="remember_check"
+ width="145" />
+ <text
+ follows="left|top"
+ font="SansSerifLarge"
+ text_color="EmphasisColor"
+ height="16"
+ name="forgot_password_text"
+ left="216"
+ top="34"
+ width="200">
+ Forgotten password
+ </text>
+ </layout_panel>
+ <layout_panel
+ height="100"
+ name="widget_right"
+ auto_resize="true"
+ width="200" />
+ </layout_stack>
+ </layout_panel>
+ <!-- end of widget stack -->
+ <!-- start of images stack -->
+ <layout_panel
+ height="500"
+ min_height="10"
+ auto_resize="false"
+ name="parent_panel3"
+ width="1024">
+ <layout_stack
+ follows="left|right|top|bottom"
+ height="500"
+ left="0"
+ name="images_stack"
+ orientation="horizontal"
+ top="0"
+ width="1024">
+ <layout_panel
+ height="500"
+ min_height="10"
+ auto_resize="true"
+ name="images_left"
+ width="96" />
+ <layout_panel
+ auto_resize="false"
+ follows="left|right|top"
+ name="images_container"
+ width="832"
+ left="0"
+ top="0"
+ height="500">
+ <icon
+ height="400"
+ width="400"
+ image_name="first_login_image_left"
+ left="0"
+ name="image_left"
+ top="0" />
+ <icon
+ height="400"
+ width="400"
+ image_name="first_login_image_right"
+ left_pad="32"
+ name="image_right"
+ top="0" />
+ <text
+ follows="left|top"
+ font="SansSerifLarge"
+ text_color="White"
+ height="64"
+ name="image_caption_left"
+ left="0"
+ halign="center"
+ top="408"
+ word_wrap="true"
+ width="400">
+ Your first step is Learning Island. Find the exit portal!
+ </text>
+ <text
+ follows="left|top"
+ font="SansSerifLarge"
+ text_color="White"
+ height="64"
+ name="image_caption_left"
+ left="432"
+ halign="center"
+ top="408"
+ word_wrap="true"
+ width="400">
+ Then explore Social Island and meet other new residents!
+ </text>
+ </layout_panel>
+ <layout_panel
+ height="100"
+ name="images_right"
+ auto_resize="true"
+ width="96" />
+ </layout_stack>
+ </layout_panel>
+ <!-- end of images stack -->
+ <layout_panel
+ height="400"
+ min_height="10"
+ auto_resize="true"
+ name="page_bottom"
+ width="1024" />
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_general.xml b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
index ea0f7d8593..9da044ab64 100755
--- a/indra/newview/skins/default/xui/en/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
@@ -179,46 +179,29 @@
left_pad="2"
name="rating_icon_adult"
width="18"/>
- <text
- type="string"
- length="1"
- follows="left|top"
- height="15"
- layout="topleft"
- left="30"
- name="start_location_textbox"
- top_pad="8"
- width="394">
- Start location:
- </text>
- <combo_box
- control_name="LoginLocation"
- follows="left|top"
- height="23"
- layout="topleft"
- name="start_location_combo"
- left="50"
- width="200">
- <combo_box.item
- label="My Last Location"
- name="MyLastLocation"
- value="last" />
- <combo_box.item
- label="My Home"
- name="MyHome"
- value="home" />
- </combo_box>
- <check_box
- control_name="ShowStartLocation"
- height="16"
- initial_value="true"
- label="Show on login"
- layout="topleft"
- left_pad="5"
- name="show_location_checkbox"
- top_delta="5"
- width="256" />
- <text
+ <check_box
+ control_name="ShowFavoritesOnLogin"
+ enabled="false"
+ height="16"
+ layout="topleft"
+ label="Show favorite locations on login screen"
+ left="30"
+ name="favorites_on_login_check"
+ top_pad="10"
+ width="350" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="15"
+ layout="topleft"
+ left="52"
+ name="favorites_check_extra_text"
+ top_pad="0"
+ width="400">
+ (Others using this computer will also see them)
+ </text>
+ <text
type="string"
length="1"
follows="left|top"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
index 78743d26bb..05a63ea725 100755
--- a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
@@ -74,17 +74,6 @@
name="auto_disengage_mic_check"
top_pad="10"
width="350" />
- <check_box
- control_name="ShowFavoritesOnLogin"
- enabled="false"
- height="16"
- layout="topleft"
- label="Show my Favorite Landmarks at Login (via &apos;Start At&apos; drop-down menu)"
- left="30"
- name="favorites_on_login_check"
- top_pad="10"
- width="350" />
-
<button
follows="left|bottom"
height="23"
diff --git a/indra/newview/skins/default/xui/en/widgets/combo_box.xml b/indra/newview/skins/default/xui/en/widgets/combo_box.xml
index 82d620d1e6..65f9a143e9 100755
--- a/indra/newview/skins/default/xui/en/widgets/combo_box.xml
+++ b/indra/newview/skins/default/xui/en/widgets/combo_box.xml
@@ -7,7 +7,7 @@
<combo_box.combo_button name="Combobox Button"
hover_glow_amount="0.15"
font="SansSerifSmall"
- scale_image="false"
+ scale_image="true"
image_unselected="ComboButton_Off"
image_selected="ComboButton_Selected"
image_disabled="ComboButton_Disabled" />
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index f7b3a45e8d..965080c74b 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -764,7 +764,7 @@ class Darwin_i386_Manifest(ViewerManifest):
'SLVoice',
):
self.path2basename(libdir, libfile)
-
+
# dylibs that vary based on configuration
if self.args['configuration'].lower() == 'debug':
for libfile in (