diff options
| -rw-r--r-- | .hgtags | 6 | ||||
| -rw-r--r-- | autobuild.xml | 24 | ||||
| -rwxr-xr-x[-rw-r--r--] | indra/cmake/LLAddBuildTest.cmake | 9 | ||||
| -rw-r--r-- | indra/cmake/LLCommon.cmake | 2 | ||||
| -rw-r--r-- | indra/llcommon/llstat.cpp | 19 | ||||
| -rw-r--r-- | indra/llcommon/llstat.h | 6 | ||||
| -rw-r--r-- | indra/newview/app_settings/settings.xml | 4 | ||||
| -rw-r--r-- | indra/newview/llappviewer.cpp | 27 | ||||
| -rw-r--r-- | indra/newview/llflexibleobject.cpp | 5 | ||||
| -rw-r--r-- | indra/newview/llfolderview.cpp | 34 | ||||
| -rw-r--r-- | indra/newview/llfolderview.h | 2 | ||||
| -rw-r--r-- | indra/newview/llfolderviewitem.cpp | 4 | ||||
| -rw-r--r-- | indra/newview/llfolderviewitem.h | 1 | ||||
| -rw-r--r-- | indra/newview/llinventorybridge.cpp | 6 | ||||
| -rw-r--r-- | indra/newview/llpanellogin.cpp | 50 | ||||
| -rw-r--r-- | indra/newview/llstartup.cpp | 35 | ||||
| -rw-r--r-- | indra/newview/llstartup.h | 2 | ||||
| -rw-r--r-- | indra/newview/llviewerparcelmgr.cpp | 3 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/notifications.xml | 2 | ||||
| -rw-r--r-- | indra/newview/tests/lllogininstance_test.cpp | 1 | 
20 files changed, 171 insertions, 71 deletions
| @@ -343,6 +343,7 @@ eb539c65e6ee26eea2bf373af2d0f4b52dc91289 DRTVWR-177  a8057e1b9a1246b434a27405be35e030f7d28b0c 3.3.4-beta3  4281aa899fb2cedb7a9ca7ce91c5c29d4aa69594 DRTVWR-180  9cd174d3a54d93d409a7c346a15b8bfb40fc58f4 DRTVWR-184 +47f0d08ba7ade0a3905074009067c6d3df7e16ae DRTVWR-190  5c08e1d8edd871807153603b690e3ee9dbb548aa DRTVWR-183  6c75f220b103db1420919c8b635fe53e2177f318 3.3.4-beta4  ab2ffc547c8a8950ff187c4f6c95e5334fab597b 3.3.4-beta5 @@ -350,4 +351,9 @@ ab2ffc547c8a8950ff187c4f6c95e5334fab597b 3.3.4-beta5  a8b3eca451a9eaab59987efb0ab1c4217e3f2dcc DRTVWR-182  1f27cdfdc54246484f8afbbe42ce48e954175cbd 3.4.0-beta1  9ee9387789701d597130f879d9011a4958753862 DRTVWR-189 +ae5c83dd61d2d37c45f1d5b8bf2b036d87599f1b DRTVWR-198  507bdfbd6bf844a511c1ffeda4baa80016ed1346 DRTVWR-197 +e9732c739c8a72a590216951505ea9c76a526a84 DRTVWR-193 +33a2fc7a910ae29ff8b4850316ed7fbff9f64d33 DRTVWR-195 +421126293dcbde918e0da027ca0ab9deb5b4fbf2 DRTVWR-192 +7602f61c804a512764e349c034c02ddabeefebc4 DRTVWR-196 diff --git a/autobuild.xml b/autobuild.xml index 0ff952be5b..b7a73f2c75 100644 --- a/autobuild.xml +++ b/autobuild.xml @@ -1254,11 +1254,11 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>de22a97b276913a6dd05838b7fe297af</string> +              <string>0578fa67ef9906c6aaa326f51db2669f</string>                <key>hash_algorithm</key>                <string>md5</string>                <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source/rev/262536/arch/Darwin/installer/llphysicsextensions_source-0.3-darwin-20120725.tar.bz2</string> +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source/rev/263415/arch/Darwin/installer/llphysicsextensions_source-0.3-darwin-20120814.tar.bz2</string>              </map>              <key>name</key>              <string>darwin</string> @@ -1268,9 +1268,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>d2dfbbc11aac34ebd551df86524c8c9c</string> +              <string>b706fdeed4ce2182d434043dc33d9d1d</string>                <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source/rev/262536/arch/Linux/installer/llphysicsextensions_source-0.3-linux-20120725.tar.bz2</string> +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source/rev/263415/arch/Linux/installer/llphysicsextensions_source-0.3-linux-20120814.tar.bz2</string>              </map>              <key>name</key>              <string>linux</string> @@ -1280,9 +1280,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>99abccc5d117ab82cadb8cff0d85b867</string> +              <string>0cebd359ea732a7db363d88f9886a1ef</string>                <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source/rev/262536/arch/CYGWIN/installer/llphysicsextensions_source-0.3-windows-20120725.tar.bz2</string> +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source/rev/263415/arch/CYGWIN/installer/llphysicsextensions_source-0.3-windows-20120814.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string> @@ -1306,11 +1306,11 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>3528620230fbd288fcc9dbbd8d8a6b59</string> +              <string>3ae798d4dfb54a1d806ee5f8b31f7626</string>                <key>hash_algorithm</key>                <string>md5</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub/rev/262536/arch/Darwin/installer/llphysicsextensions_stub-0.3-darwin-20120725.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub/rev/263415/arch/Darwin/installer/llphysicsextensions_stub-0.3-darwin-20120814.tar.bz2</string>              </map>              <key>name</key>              <string>darwin</string> @@ -1320,9 +1320,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>69d188f72f9494b0e74c94ca0496f618</string> +              <string>aa8a2f25e8629cf5e6a96cc0eb93de8e</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub/rev/262536/arch/Linux/installer/llphysicsextensions_stub-0.3-linux-20120725.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub/rev/263415/arch/Linux/installer/llphysicsextensions_stub-0.3-linux-20120814.tar.bz2</string>              </map>              <key>name</key>              <string>linux</string> @@ -1332,9 +1332,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>61fc2b84ad53cf8d98d1784c31f9928e</string> +              <string>3ea4cee6a8dd4c89fbfd3ad6abd703c2</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub/rev/262536/arch/CYGWIN/installer/llphysicsextensions_stub-0.3-windows-20120725.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub/rev/263415/arch/CYGWIN/installer/llphysicsextensions_stub-0.3-windows-20120814.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string> diff --git a/indra/cmake/LLAddBuildTest.cmake b/indra/cmake/LLAddBuildTest.cmake index a6f69a09e9..543075db5b 100644..100755 --- a/indra/cmake/LLAddBuildTest.cmake +++ b/indra/cmake/LLAddBuildTest.cmake @@ -201,6 +201,15 @@ FUNCTION(LL_ADD_INTEGRATION_TEST    endif(TEST_DEBUG)    ADD_EXECUTABLE(INTEGRATION_TEST_${testname} ${source_files})    SET_TARGET_PROPERTIES(INTEGRATION_TEST_${testname} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${EXE_STAGING_DIR}") +  if (WINDOWS) +    set_target_properties(INTEGRATION_TEST_${testname} +      PROPERTIES  +      LINK_FLAGS "/debug /NODEFAULTLIB:LIBCMT /SUBSYSTEM:WINDOWS /INCLUDE:__tcmalloc" +      LINK_FLAGS_DEBUG "/NODEFAULTLIB:\"LIBCMT;LIBCMTD;MSVCRT\" /INCREMENTAL:NO" +      LINK_FLAGS_RELEASE "" +      ) +  endif(WINDOWS) +    if(STANDALONE)      SET_TARGET_PROPERTIES(INTEGRATION_TEST_${testname} PROPERTIES COMPILE_FLAGS -I"${TUT_INCLUDE_DIR}")    endif(STANDALONE) diff --git a/indra/cmake/LLCommon.cmake b/indra/cmake/LLCommon.cmake index 17e211cb99..d4694ad37a 100644 --- a/indra/cmake/LLCommon.cmake +++ b/indra/cmake/LLCommon.cmake @@ -24,7 +24,7 @@ endif (LINUX)  add_definitions(${TCMALLOC_FLAG}) -set(LLCOMMON_LINK_SHARED ON CACHE BOOL "Build the llcommon target as a shared library.") +set(LLCOMMON_LINK_SHARED OFF CACHE BOOL "Build the llcommon target as a shared library.")  if(LLCOMMON_LINK_SHARED)    add_definitions(-DLL_COMMON_LINK_SHARED=1)  endif(LLCOMMON_LINK_SHARED) diff --git a/indra/llcommon/llstat.cpp b/indra/llcommon/llstat.cpp index 057257057f..b82d52797e 100644 --- a/indra/llcommon/llstat.cpp +++ b/indra/llcommon/llstat.cpp @@ -40,7 +40,6 @@  S32	            LLPerfBlock::sStatsFlags = LLPerfBlock::LLSTATS_NO_OPTIONAL_STATS;       // Control what is being recorded  LLPerfBlock::stat_map_t    LLPerfBlock::sStatMap;    // Map full path string to LLStatTime objects, tracks all active objects  std::string        LLPerfBlock::sCurrentStatPath = "";    // Something like "/total_time/physics/physics step" -LLStat::stat_map_t LLStat::sStatList;  //------------------------------------------------------------------------  // Live config file to trigger stats logging @@ -771,13 +770,19 @@ void LLStat::init()  	if (!mName.empty())  	{ -		stat_map_t::iterator iter = sStatList.find(mName); -		if (iter != sStatList.end()) +		stat_map_t::iterator iter = getStatList().find(mName); +		if (iter != getStatList().end())  			llwarns << "LLStat with duplicate name: " << mName << llendl; -		sStatList.insert(std::make_pair(mName, this)); +		getStatList().insert(std::make_pair(mName, this));  	}  } +LLStat::stat_map_t& LLStat::getStatList() +{ +	static LLStat::stat_map_t stat_list; +	return stat_list; +} +  LLStat::LLStat(const U32 num_bins, const BOOL use_frame_timer)  	: mUseFrameTimer(use_frame_timer),  	  mNumBins(num_bins) @@ -803,10 +808,10 @@ LLStat::~LLStat()  	if (!mName.empty())  	{  		// handle multiple entries with the same name -		stat_map_t::iterator iter = sStatList.find(mName); -		while (iter != sStatList.end() && iter->second != this) +		stat_map_t::iterator iter = getStatList().find(mName); +		while (iter != getStatList().end() && iter->second != this)  			++iter; -		sStatList.erase(iter); +		getStatList().erase(iter);  	}  } diff --git a/indra/llcommon/llstat.h b/indra/llcommon/llstat.h index b877432e86..1a8404cc07 100644 --- a/indra/llcommon/llstat.h +++ b/indra/llcommon/llstat.h @@ -263,9 +263,9 @@ class LL_COMMON_API LLStat  {  private:  	typedef std::multimap<std::string, LLStat*> stat_map_t; -	static stat_map_t sStatList;  	void init(); +	static stat_map_t& getStatList();  public:  	LLStat(U32 num_bins = 32, BOOL use_frame_timer = FALSE); @@ -342,8 +342,8 @@ public:  	static LLStat* getStat(const std::string& name)  	{  		// return the first stat that matches 'name' -		stat_map_t::iterator iter = sStatList.find(name); -		if (iter != sStatList.end()) +		stat_map_t::iterator iter = getStatList().find(name); +		if (iter != getStatList().end())  			return iter->second;  		else  			return NULL; diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 2af71d98b8..1bf773bb9e 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -5023,7 +5023,7 @@      <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> @@ -6123,7 +6123,7 @@      <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> diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 63737c78d0..cb69048c60 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -2665,14 +2665,6 @@ bool LLAppViewer::initConfiguration()  		}  	} -	// 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"))  	{  	    // @@ -2720,12 +2712,27 @@ bool LLAppViewer::initConfiguration()          }  	} -   	// 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"); diff --git a/indra/newview/llflexibleobject.cpp b/indra/newview/llflexibleobject.cpp index c4dca4cb79..9745bb6d64 100644 --- a/indra/newview/llflexibleobject.cpp +++ b/indra/newview/llflexibleobject.cpp @@ -368,10 +368,11 @@ void LLVolumeImplFlexible::doFlexibleUpdate()  	LLPath *path = &volume->getPath();  	if ((mSimulateRes == 0 || !mInitialized) && mVO->mDrawable->isVisible())   	{ -		//mVO->markForUpdate(TRUE); +		BOOL force_update = mSimulateRes == 0 ? TRUE : FALSE; +  		doIdleUpdate(gAgent, *LLWorld::getInstance(), 0.0); -		if (mSimulateRes == 0) +		if (!force_update || !gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_FLEXIBLE))  		{  			return;	// we did not get updated or initialized, proceeding without can be dangerous  		} diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp index 7d047ec67e..d4080ab3f7 100644 --- a/indra/newview/llfolderview.cpp +++ b/indra/newview/llfolderview.cpp @@ -2235,14 +2235,9 @@ void LLFolderView::doIdle()  		arrangeAll();  	} -	mNeedsAutoSelect = mFilter->hasFilterString() && -							!(gFocusMgr.childHasKeyboardFocus(this) || gFocusMgr.getMouseCapture()); - -		 -	if (mFilter->isModified() && mFilter->isNotDefault()) -	{ -		mNeedsAutoSelect = TRUE; -	} +	BOOL filter_modified_and_active = mFilter->isModified() && mFilter->isNotDefault(); +	mNeedsAutoSelect = filter_modified_and_active && +						!(gFocusMgr.childHasKeyboardFocus(this) || gFocusMgr.getMouseCapture());  	mFilter->clearModified();  	// filter to determine visibility before arranging @@ -2254,7 +2249,7 @@ void LLFolderView::doIdle()  		LLFastTimer t3(FTM_AUTO_SELECT);  		// select new item only if a filtered item not currently selected  		LLFolderViewItem* selected_itemp = mSelectedItems.empty() ? NULL : mSelectedItems.back(); -		if (!mAutoSelectOverride && (!selected_itemp || !selected_itemp->potentiallyFiltered())) +		if (!mAutoSelectOverride && (!selected_itemp || !selected_itemp->potentiallyVisible()))  		{  			// these are named variables to get around gcc not binding non-const references to rvalues  			// and functor application is inherently non-const to allow for stateful functors @@ -2264,7 +2259,7 @@ void LLFolderView::doIdle()  		// Open filtered folders for folder views with mAutoSelectOverride=TRUE.  		// Used by LLPlacesFolderView. -		if (mAutoSelectOverride && !mFilter->getFilterSubString().empty()) +		if (!mFilter->getFilterSubString().empty())  		{  			// these are named variables to get around gcc not binding non-const references to rvalues  			// and functor application is inherently non-const to allow for stateful functors @@ -2556,6 +2551,25 @@ void LLFolderView::onRenamerLost()  	}  } +LLFolderViewItem* LLFolderView::getNextUnselectedItem() +{ +	LLFolderViewItem* last_item = *mSelectedItems.rbegin(); +	LLFolderViewItem* new_selection = last_item->getNextOpenNode(FALSE); +	while(new_selection && new_selection->isSelected()) +	{ +		new_selection = new_selection->getNextOpenNode(FALSE); +	} +	if (!new_selection) +	{ +		new_selection = last_item->getPreviousOpenNode(FALSE); +		while (new_selection && (new_selection->isInSelection())) +		{ +			new_selection = new_selection->getPreviousOpenNode(FALSE); +		} +	} +	return new_selection; +} +  LLInventoryFilter* LLFolderView::getFilter()  {  	return mFilter; diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h index da8bb15f8e..3f78312a98 100644 --- a/indra/newview/llfolderview.h +++ b/indra/newview/llfolderview.h @@ -207,6 +207,8 @@ public:  	virtual void	doDelete();  	virtual BOOL	canDoDelete() const; +	LLFolderViewItem* getNextUnselectedItem(); +	  	// Public rename functionality - can only start the process  	void startRenamingSelectedItem( void ); diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp index 515e544452..3aa16b4413 100644 --- a/indra/newview/llfolderviewitem.cpp +++ b/indra/newview/llfolderviewitem.cpp @@ -1098,6 +1098,10 @@ void LLFolderViewItem::draw()  	}  } +bool LLFolderViewItem::isInSelection() const +{ +	return mIsSelected || (mParentFolder && mParentFolder->isInSelection()); +}  ///----------------------------------------------------------------------------  /// Class LLFolderViewFolder diff --git a/indra/newview/llfolderviewitem.h b/indra/newview/llfolderviewitem.h index 3c7592046a..577b6b54a2 100644 --- a/indra/newview/llfolderviewitem.h +++ b/indra/newview/llfolderviewitem.h @@ -243,6 +243,7 @@ public:  	virtual void destroyView();  	BOOL isSelected() const { return mIsSelected; } +	bool isInSelection() const;  	void setUnselected() { mIsSelected = FALSE; } diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index b86c453d61..b819100b9b 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -1355,7 +1355,10 @@ void LLItemBridge::performAction(LLInventoryModel* model, std::string action)  	else if ("cut" == action)  	{  		cutToClipboard(); +		// MAINT-1197: This is temp code to work around a deselection/reselection bug. Please discard when merging CHUI. +		LLFolderViewItem* item_to_select = mRoot->getNextUnselectedItem();  		LLFolderView::removeCutItems(); +		mRoot->setSelection(item_to_select, item_to_select ? item_to_select->isOpen() : false, false);  		return;  	}  	else if ("copy" == action) @@ -2743,7 +2746,10 @@ void LLFolderBridge::performAction(LLInventoryModel* model, std::string action)  	else if ("cut" == action)  	{  		cutToClipboard(); +		// MAINT-1197: This is temp code to work around a deselection/reselection bug. Please discard when merging CHUI. +		LLFolderViewItem* item_to_select = mRoot->getNextUnselectedItem();  		LLFolderView::removeCutItems(); +		mRoot->setSelection(item_to_select, item_to_select ? item_to_select->isOpen() : false, false);  		return;  	}  	else if ("copy" == action) diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp index a8049b1b03..44ff62e290 100644 --- a/indra/newview/llpanellogin.cpp +++ b/indra/newview/llpanellogin.cpp @@ -145,12 +145,6 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,  	// 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 @@ -182,6 +176,29 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,  							 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"); @@ -645,8 +662,11 @@ void LLPanelLogin::onUpdateStartSLURL(const LLSLURL& new_start_slurl)  	 * 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?  		{ @@ -668,8 +688,24 @@ void LLPanelLogin::onUpdateStartSLURL(const LLSLURL& new_start_slurl)  		{  			// 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;  	}  } diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index a28d8d3546..218c35029e 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -2823,22 +2823,33 @@ bool LLStartUp::dispatchURL()  void LLStartUp::setStartSLURL(const LLSLURL& slurl)   { -  sStartSLURL = slurl; -  LL_DEBUGS("AppInit")<<slurl.asString()<<LL_ENDL; +	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); +	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. diff --git a/indra/newview/llstartup.h b/indra/newview/llstartup.h index 3754aaf966..760e38890b 100644 --- a/indra/newview/llstartup.h +++ b/indra/newview/llstartup.h @@ -111,7 +111,7 @@ public:  	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 diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp index ae9c31bfe7..2bb2e92279 100644 --- a/indra/newview/llviewerparcelmgr.cpp +++ b/indra/newview/llviewerparcelmgr.cpp @@ -545,9 +545,6 @@ LLParcelSelectionHandle LLViewerParcelMgr::selectLand(const LLVector3d &corner1,  	mRequestResult = PARCEL_RESULT_NO_DATA; -	// clear the list of segments to prevent flashing -	resetSegments(mHighlightSegments); -  	mFloatingParcelSelection->setParcel(mCurrentParcel);  	mCurrentParcelSelection->setParcel(NULL);  	mCurrentParcelSelection = new LLParcelSelection(mCurrentParcel); diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 9974ffbb52..ae5278b7ec 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -2894,7 +2894,7 @@ You have been moved into a nearby region.     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> diff --git a/indra/newview/tests/lllogininstance_test.cpp b/indra/newview/tests/lllogininstance_test.cpp index b7e81c4199..7705b4c567 100644 --- a/indra/newview/tests/lllogininstance_test.cpp +++ b/indra/newview/tests/lllogininstance_test.cpp @@ -60,6 +60,7 @@ static LLEventStream gTestPump("test_pump");  #include "../llslurl.h"  #include "../llstartup.h"  LLSLURL LLStartUp::sStartSLURL; +LLSLURL& LLStartUp::getStartSLURL() { return sStartSLURL; }  #include "lllogin.h" | 
