diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake
index 96005febe..66abb6edb 100644
--- a/indra/cmake/00-Common.cmake
+++ b/indra/cmake/00-Common.cmake
@@ -230,7 +230,7 @@ if (LINUX)
endif (${ARCH} STREQUAL "x86_64")
endif (VIEWER)
- set(CMAKE_CXX_FLAGS_DEBUG "-fno-inline ${CMAKE_CXX_FLAGS_DEBUG}")
+ set(CMAKE_CXX_FLAGS_DEBUG "-fno-inline ${CMAKE_CXX_FLAGS_DEBUG} -msse2")
set(CMAKE_CXX_FLAGS_RELEASE "-O3 ${CMAKE_CXX_FLAGS_RELEASE}")
set(CMAKE_C_FLAGS_RELEASE "-O3 ${CMAKE_C_FLAGS_RELEASE}")
set(CMAKE_CXX_FLAGS_RELEASESSE2 "-O3 ${CMAKE_CXX_FLAGS_RELEASESSE2}")
diff --git a/indra/llcommon/llprocesslauncher.cpp b/indra/llcommon/llprocesslauncher.cpp
index 45bd98e20..b6d410da9 100644
--- a/indra/llcommon/llprocesslauncher.cpp
+++ b/indra/llcommon/llprocesslauncher.cpp
@@ -328,7 +328,11 @@ int LLProcessLauncher::launch(void)
apr_file_t* out;
AIAPRPool pool;
pool.create();
+#if(APR_VERSION_MAJOR==1 && APR_VERSION_MINOR>=3 || APR_VERSION_MAJOR>1)
apr_status_t status = apr_file_pipe_create_ex(&in, &out, APR_FULL_BLOCK, pool());
+#else
+ apr_status_t status = apr_file_pipe_create(&in, &out, pool());
+#endif
assert(status == APR_SUCCESS);
bool success = (status == APR_SUCCESS);
if (success)
diff --git a/indra/llcommon/llthread.cpp b/indra/llcommon/llthread.cpp
index b0cc64e59..c2b93ebed 100644
--- a/indra/llcommon/llthread.cpp
+++ b/indra/llcommon/llthread.cpp
@@ -102,7 +102,7 @@ void *APR_THREAD_FUNC LLThread::staticRun(apr_thread_t *apr_threadp, void *datap
// Setting mStatus to STOPPED is done non-thread-safe, so it's
// possible that the thread is deleted by another thread at
// the moment it happens... therefore make a copy here.
- char const* name = threadp->mName;
+ volatile char const* name = threadp->mName.c_str();
// We're done with the run function, this thread is done executing now.
threadp->mStatus = STOPPED;
diff --git a/indra/llcommon/llthread.h b/indra/llcommon/llthread.h
index 7939a0d56..c5c30a904 100644
--- a/indra/llcommon/llthread.h
+++ b/indra/llcommon/llthread.h
@@ -128,7 +128,7 @@ protected:
LLCondition* mRunCondition;
apr_thread_t *mAPRThreadp;
- EThreadStatus mStatus;
+ volatile EThreadStatus mStatus;
U32 mID;
friend void AIThreadLocalData::create(LLThread* threadp);
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 6a68ded09..ca13e4f39 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -12397,6 +12397,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/llviewerprecompiledheaders.h b/indra/newview/llviewerprecompiledheaders.h
index 85eaabee9..d2681503b 100644
--- a/indra/newview/llviewerprecompiledheaders.h
+++ b/indra/newview/llviewerprecompiledheaders.h
@@ -96,7 +96,6 @@
#include "llstack.h"
#include "llstat.h"
#include "llstl.h"
-#include "llstrider.h"
#include "llstring.h"
#include "llstringtable.h"
#include "llsys.h"
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.