Scott Lawrence avatar Scott Lawrence committed 472f679 Merge

merge changes for DRTVWR-193

Comments (0)

Files changed (8)

 a8b3eca451a9eaab59987efb0ab1c4217e3f2dcc DRTVWR-182
 1f27cdfdc54246484f8afbbe42ce48e954175cbd 3.4.0-beta1
 9ee9387789701d597130f879d9011a4958753862 DRTVWR-189
+e9732c739c8a72a590216951505ea9c76a526a84 DRTVWR-193
 33a2fc7a910ae29ff8b4850316ed7fbff9f64d33 DRTVWR-195
 421126293dcbde918e0da027ca0ab9deb5b4fbf2 DRTVWR-192

indra/newview/app_settings/settings.xml

     <key>LoginLocation</key>
     <map>
       <key>Comment</key>
-      <string>Login location ('last', 'home')</string>
+      <string>Default Login location ('last', 'home') preference</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
     <key>NextLoginLocation</key>
     <map>
       <key>Comment</key>
-      <string>Location to log into by default.</string>
+      <string>Location to log into for this session - set from command line or the login panel, cleared following a successfull login.</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>

indra/newview/llappviewer.cpp

 		}
 	}
 
-	// If automatic login from command line with --login switch
-	// init StartSLURL location. In interactive login, LLPanelLogin
-	// will take care of it.
-	if ((clp.hasOption("login") || clp.hasOption("autologin")) && !clp.hasOption("url") && !clp.hasOption("slurl"))
-	{
-		LLStartUp::setStartSLURL(LLSLURL(gSavedSettings.getString("LoginLocation")));
-	}
-
 	if (!gSavedSettings.getBOOL("AllowMultipleViewers"))
 	{
 	    //
         }
 	}
 
-   	// need to do this here - need to have initialized global settings first
+   	// NextLoginLocation is set from the command line option
 	std::string nextLoginLocation = gSavedSettings.getString( "NextLoginLocation" );
 	if ( !nextLoginLocation.empty() )
 	{
+		LL_DEBUGS("AppInit")<<"set start from NextLoginLocation: "<<nextLoginLocation<<LL_ENDL;
 		LLStartUp::setStartSLURL(LLSLURL(nextLoginLocation));
-	};
+	}
+	else if (   (   clp.hasOption("login") || clp.hasOption("autologin"))
+			 && !clp.hasOption("url")
+			 && !clp.hasOption("slurl"))
+	{
+		// If automatic login from command line with --login switch
+		// init StartSLURL location.
+		std::string start_slurl_setting = gSavedSettings.getString("LoginLocation");
+		LL_DEBUGS("AppInit") << "start slurl setting '" << start_slurl_setting << "'" << LL_ENDL;
+		LLStartUp::setStartSLURL(LLSLURL(start_slurl_setting));
+	}
+	else
+	{
+		// the login location will be set by the login panel (see LLPanelLogin)
+	}
 
 	gLastRunVersion = gSavedSettings.getString("LastRunVersion");
 

indra/newview/llpanellogin.cpp

 
 	// change z sort of clickable text to be behind buttons
 	sendChildToBack(getChildView("forgot_password_text"));
-
-	if(LLStartUp::getStartSLURL().getType() != LLSLURL::LOCATION)
-	{
-		LLSLURL slurl(gSavedSettings.getString("LoginLocation"));
-		LLStartUp::setStartSLURL(slurl);
-	}
 	
 	LLComboBox* location_combo = getChild<LLComboBox>("start_location_combo");
 	updateLocationSelectorsVisibility(); // separate so that it can be called from preferences
 							 ADD_TOP);	
 	server_choice_combo->selectFirstItem();		
 
+	LLSLURL start_slurl(LLStartUp::getStartSLURL());
+	if ( !start_slurl.isSpatial() ) // has a start been established by the command line or NextLoginLocation ? 
+	{
+		// no, so get the preference setting
+		std::string defaultStartLocation = gSavedSettings.getString("LoginLocation");
+		LL_INFOS("AppInit")<<"default LoginLocation '"<<defaultStartLocation<<"'"<<LL_ENDL;
+		LLSLURL defaultStart(defaultStartLocation);
+		if ( defaultStart.isSpatial() )
+		{
+			LLStartUp::setStartSLURL(defaultStart);
+		}
+		else
+		{
+			LL_INFOS("AppInit")<<"no valid LoginLocation, using home"<<LL_ENDL;
+			LLSLURL homeStart(LLSLURL::SIM_LOCATION_HOME);
+			LLStartUp::setStartSLURL(homeStart);
+		}
+	}
+	else
+	{
+		LLPanelLogin::onUpdateStartSLURL(start_slurl); // updates grid if needed
+	}
+	
 	childSetAction("connect_btn", onClickConnect, this);
 
 	getChild<LLPanel>("login")->setDefaultBtn("connect_btn");
 	 * specify a particular grid; in those cases we want to change the grid
 	 * and the grid selector to match the new value.
 	 */
-	if ( LLSLURL::LOCATION == new_start_slurl.getType() )
+	enum LLSLURL::SLURL_TYPE new_slurl_type = new_start_slurl.getType();
+	switch ( new_slurl_type )
 	{
+	case LLSLURL::LOCATION:
+	  {
 		std::string slurl_grid = LLGridManager::getInstance()->getGrid(new_start_slurl.getGrid());
 		if ( ! slurl_grid.empty() ) // is that a valid grid?
 		{
 		{
 			// the grid specified by the slurl is not known
 			LLNotificationsUtil::add("InvalidLocationSLURL");
+			LL_WARNS("AppInit")<<"invalid LoginLocation:"<<new_start_slurl.asString()<<LL_ENDL;
 			location_combo->setTextEntry(LLStringUtil::null);
 		}
+	  }
+ 	break;
+
+	case LLSLURL::HOME_LOCATION:
+		location_combo->setCurrentByIndex(1); // home location
+		break;
+		
+	case LLSLURL::LAST_LOCATION:
+		location_combo->setCurrentByIndex(0); // last location
+		break;
+
+	default:
+		LL_WARNS("AppInit")<<"invalid login slurl, using home"<<LL_ENDL;
+		location_combo->setCurrentByIndex(1); // home location
+		break;
 	}
 }
 

indra/newview/llstartup.cpp

 
 void LLStartUp::setStartSLURL(const LLSLURL& slurl) 
 {
-  sStartSLURL = slurl;
-  LL_DEBUGS("AppInit")<<slurl.asString()<<LL_ENDL;
-
-  switch(slurl.getType())
-    {
-    case LLSLURL::HOME_LOCATION:
-    case LLSLURL::LAST_LOCATION:
-    case LLSLURL::LOCATION:
-		gSavedSettings.setString("LoginLocation", LLSLURL::SIM_LOCATION_HOME);
+	LL_DEBUGS("AppInit")<<slurl.asString()<<LL_ENDL;
+
+	if ( slurl.isSpatial() )
+	{
+		std::string new_start = slurl.getSLURLString();
+		LL_DEBUGS("AppInit")<<new_start<<LL_ENDL;
+		sStartSLURL = slurl;
 		LLPanelLogin::onUpdateStartSLURL(slurl); // updates grid if needed
-		break;
-    default:
-		break;
-    }
+
+		// remember that this is where we wanted to log in...if the login fails,
+		// the next attempt will default to the same place.
+		gSavedSettings.setString("NextLoginLocation", new_start);
+		// following a successful login, this is cleared
+		// and the default reverts to LoginLocation
+	}
+	else
+	{
+		LL_WARNS("AppInit")<<"Invalid start SLURL (ignored): "<<slurl.asString()<<LL_ENDL;
+	}
 }
 
+// static
+LLSLURL& LLStartUp::getStartSLURL()
+{
+	return sStartSLURL;
+} 
+
 /**
  * Read all proxy configuration settings and set up both the HTTP proxy and
  * SOCKS proxy as needed.

indra/newview/llstartup.h

 
 	static void postStartupState();
 	static void setStartSLURL(const LLSLURL& slurl); 
-	static LLSLURL& getStartSLURL() { return sStartSLURL; } 
+	static LLSLURL& getStartSLURL();
 
 	static bool startLLProxy(); // Initialize the SOCKS 5 proxy
 

indra/newview/skins/default/xui/en/notifications.xml

    name="AvatarMovedLast"
    type="alertmodal">
    <tag>fail</tag>
-Your last location is not currently available.
+Your requested location is not currently available.
 You have been moved into a nearby region.
   </notification>
 

indra/newview/tests/lllogininstance_test.cpp

 #include "../llslurl.h"
 #include "../llstartup.h"
 LLSLURL LLStartUp::sStartSLURL;
+LLSLURL& LLStartUp::getStartSLURL() { return sStartSLURL; }
 
 #include "lllogin.h"
 
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.