diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h
index aa8d826d0..ba2e3f542 100644
--- a/indra/llcommon/llversionviewer.h
+++ b/indra/llcommon/llversionviewer.h
@@ -36,7 +36,7 @@
const S32 LL_VERSION_MAJOR = 1;
const S32 LL_VERSION_MINOR = 5;
const S32 LL_VERSION_PATCH = 10;
-const S32 LL_VERSION_BUILD = 0;
+const S32 LL_VERSION_BUILD = 1;
const char * const LL_CHANNEL = "Singularity";
diff --git a/indra/llui/llresmgr.cpp b/indra/llui/llresmgr.cpp
index 68fd08921..07649adfa 100644
--- a/indra/llui/llresmgr.cpp
+++ b/indra/llui/llresmgr.cpp
@@ -453,15 +453,17 @@ const std::string LLLocale::USER_LOCALE("en_US.utf8");
const std::string LLLocale::SYSTEM_LOCALE("C");
#endif
+static std::string PrevFailedLocaleString = "";
LLLocale::LLLocale(const std::string& locale_string)
{
mPrevLocaleString = setlocale( LC_ALL, NULL );
char* new_locale_string = setlocale( LC_ALL, locale_string.c_str());
- if ( new_locale_string == NULL)
+ if ( new_locale_string == NULL && PrevFailedLocaleString != locale_string )
{
llwarns << "Failed to set locale " << locale_string.c_str() << llendl;
setlocale(LC_ALL, SYSTEM_LOCALE.c_str());
+ PrevFailedLocaleString = locale_string;
}
//else
//{
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index cee822d03..cfe10a2e2 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -12383,6 +12383,17 @@
Value
0
+ SnapshotBtnState
+
SnapshotFormat
- RadarListBtnState
-
WindEnabled
diff --git a/indra/newview/llfloateravatarlist.cpp b/indra/newview/llfloateravatarlist.cpp
index 13a10a0f7..a568b88e9 100644
--- a/indra/newview/llfloateravatarlist.cpp
+++ b/indra/newview/llfloateravatarlist.cpp
@@ -229,7 +229,10 @@ void LLFloaterAvatarList::createInstance(bool visible)
sInstance = new LLFloaterAvatarList();
LLUICtrlFactory::getInstance()->buildFloater(sInstance, "floater_radar.xml");
if(!visible)
+ {
sInstance->setVisible(FALSE);
+ gSavedSettings.setBOOL("ShowRadar", FALSE);
+ }
}
//static
void LLFloaterAvatarList::toggle(void*)
diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp
index ed7415132..80d4e975d 100644
--- a/indra/newview/llfloatersnapshot.cpp
+++ b/indra/newview/llfloatersnapshot.cpp
@@ -2111,11 +2111,17 @@ void LLFloaterSnapshot::draw()
}
}
+void LLFloaterSnapshot::onOpen()
+{
+ gSavedSettings.setBOOL("SnapshotBtnState", TRUE);
+}
+
void LLFloaterSnapshot::onClose(bool app_quitting)
{
gSnapshotFloaterView->setEnabled(FALSE);
// Set invisible so it doesn't eat tooltips. JC
gSnapshotFloaterView->setVisible(FALSE);
+ gSavedSettings.setBOOL("SnapshotBtnState", FALSE);
destroy();
}
diff --git a/indra/newview/llfloatersnapshot.h b/indra/newview/llfloatersnapshot.h
index 14f1872cd..8fb51c945 100644
--- a/indra/newview/llfloatersnapshot.h
+++ b/indra/newview/llfloatersnapshot.h
@@ -56,6 +56,7 @@ public:
/*virtual*/ BOOL postBuild();
/*virtual*/ void draw();
/*virtual*/ void onClose(bool app_quitting);
+ /*virtual*/ void onOpen();
static void show(void*);
static void hide(void*);
diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index 79da3805b..1920750be 100644
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -607,7 +607,7 @@ void LLPanelLogin::giveFocus()
if( sInstance )
{
// Grab focus and move cursor to first blank input field
- std::string first = sInstance->childGetText("name_combo");
+ std::string first = sInstance->getChild("name_combo")->getTextEntry();
std::string pass = sInstance->childGetText("password_edit");
BOOL have_first = !first.empty();
@@ -712,6 +712,7 @@ void LLPanelLogin::setFields(const LLSavedLoginEntry& entry, bool takeFocus)
std::string fullname = nameJoin(entry.getFirstName(), entry.getLastName());
LLComboBox* login_combo = sInstance->getChild("name_combo");
login_combo->setTextEntry(fullname);
+ login_combo->resetTextDirty();
//sInstance->childSetText("name_combo", fullname);
std::string grid = entry.getGrid();
@@ -1237,16 +1238,10 @@ void LLPanelLogin::onLoginComboLostFocus(LLFocusableElement* fe, void*)
if (sInstance)
{
LLComboBox* combo = sInstance->getChild("name_combo");
- if(fe == combo)
+ if(fe == combo && combo->isTextDirty())
{
- if (combo->isTextDirty())
- {
- clearPassword();
- }
- else
- {
- onSelectLoginEntry(combo, NULL);
- }
+ clearPassword();
+ combo->resetTextDirty();
}
}
}
diff --git a/indra/newview/lltoolbar.cpp b/indra/newview/lltoolbar.cpp
index 44fc368f3..8b1325ea2 100644
--- a/indra/newview/lltoolbar.cpp
+++ b/indra/newview/lltoolbar.cpp
@@ -134,7 +134,7 @@ BOOL LLToolBar::postBuild()
childSetControlName("appearance_btn", "");
childSetAction("radar_list_btn", onClickRadarList, this);
- childSetControlName("radar_list_btn", "RadarListBtnState");
+ childSetControlName("radar_list_btn", "ShowRadar");
childSetAction("fly_btn", onClickFly, this);
childSetControlName("fly_btn", "FlyBtnState");
@@ -143,7 +143,7 @@ BOOL LLToolBar::postBuild()
childSetControlName("sit_btn", "SitBtnState");
childSetAction("snapshot_btn", onClickSnapshot, this);
- childSetControlName("snapshot_btn", "");
+ childSetControlName("snapshot_btn", "SnapshotBtnState");
childSetAction("directory_btn", onClickDirectory, this);
childSetControlName("directory_btn", "ShowDirectory");
diff --git a/indra/newview/statemachine/aistatemachine.h b/indra/newview/statemachine/aistatemachine.h
index 094f30031..0c905668c 100644
--- a/indra/newview/statemachine/aistatemachine.h
+++ b/indra/newview/statemachine/aistatemachine.h
@@ -70,14 +70,16 @@
// .-------. | |
// | Run |_, | Call multiplex_impl() until idle(), abort() or finish() is called.
// '-------' |
-// | | |
-// v | |
-// Abort | | Calls abort_impl().
-// | | |
-// v v |
-// Finish | Calls finish_impl().
-// | |
-// `---------'
+// | | |
+// v | |
+// Abort | | Calls abort_impl().
+// | | |
+// v v |
+// Finish | Calls finish_impl(), which may call kill() and/or the callback
+// | | | function passed to run(), if any, which may call kill() and/or run().
+// | `-------'
+// v
+// Killed Delete the statemachine (all statemachines must be allocated with new).
//
// Each state causes corresponding code to be called.
// Finish cleans up whatever is done by Initialize.
@@ -93,6 +95,12 @@
// abort() in case of failure, or finish() in case of success.
// Respectively these set the state to Abort and Finish.
//
+// finish_impl may call kill() for a (default) destruction upon finish.
+// Even in that case the callback (passed to run()) may call run() again,
+// which overrides the request for a default kill. Or, if finish_impl
+// doesn't call kill() the callback may call kill() to request the
+// destruction of the state machine object.
+//
// State machines are run from the "idle" part of the viewer main loop.
// Often a state machine has nothing to do however. In that case it can
// call the method idle(). This will stop the state machine until
@@ -184,7 +192,7 @@ class AIStateMachine {
base_state_type mState; //!< State of the base class.
bool mIdle; //!< True if this state machine is not running.
bool mAborted; //!< True after calling abort() and before calling run().
- bool mQueued; //!< True when the statemachine is queued to be added back to the active list.
+ bool mQueued; //!< True when the statemachine is queued to be added back to the active list.
S64 mSleep; //!< Non-zero while the state machine is sleeping.
// Callback facilities.