summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.hgtags6
-rw-r--r--autobuild.xml24
-rwxr-xr-x[-rw-r--r--]indra/cmake/LLAddBuildTest.cmake9
-rw-r--r--indra/cmake/LLCommon.cmake2
-rw-r--r--indra/llcommon/llstat.cpp19
-rw-r--r--indra/llcommon/llstat.h6
-rw-r--r--indra/newview/app_settings/settings.xml4
-rw-r--r--indra/newview/llappviewer.cpp27
-rw-r--r--indra/newview/llflexibleobject.cpp5
-rw-r--r--indra/newview/llfolderview.cpp34
-rw-r--r--indra/newview/llfolderview.h2
-rw-r--r--indra/newview/llfolderviewitem.cpp4
-rw-r--r--indra/newview/llfolderviewitem.h1
-rw-r--r--indra/newview/llinventorybridge.cpp6
-rw-r--r--indra/newview/llpanellogin.cpp50
-rw-r--r--indra/newview/llstartup.cpp35
-rw-r--r--indra/newview/llstartup.h2
-rw-r--r--indra/newview/llviewerparcelmgr.cpp3
-rw-r--r--indra/newview/skins/default/xui/en/notifications.xml2
-rw-r--r--indra/newview/tests/lllogininstance_test.cpp1
20 files changed, 171 insertions, 71 deletions
diff --git a/.hgtags b/.hgtags
index d557d7eb5e..e64c06c43a 100644
--- a/.hgtags
+++ b/.hgtags
@@ -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"