diff --git a/indra/newview/fsfloaterposestand.cpp b/indra/newview/fsfloaterposestand.cpp
index 05273fe7a1..6774fdd6d4 100644
--- a/indra/newview/fsfloaterposestand.cpp
+++ b/indra/newview/fsfloaterposestand.cpp
@@ -46,8 +46,7 @@ void FSFloaterPoseStand::onOpen(const LLSD& key)
{
if (gSavedSettings.getBOOL("FSPoseStandLock") && !gAgentAvatarp->isSitting() && isAgentAvatarValid())
{
- gAgent.sitDown();
- mPoseStandLock = true;
+ setLock(true);
}
gAgentAvatarp->setIsEditingAppearance(TRUE);
onCommitCombo();
@@ -57,7 +56,9 @@ void FSFloaterPoseStand::onOpen(const LLSD& key)
void FSFloaterPoseStand::onClose(bool app_quitting)
{
if (mPoseStandLock == true && gAgentAvatarp->isSitting() && isAgentAvatarValid())
- gAgent.standUp();
+ {
+ setLock(false);
+ }
gAgentAvatarp->setIsEditingAppearance(FALSE);
FSPose::getInstance()->stopPose();
}
@@ -86,3 +87,16 @@ void FSFloaterPoseStand::onCommitCombo()
std::string selected_pose = mComboPose->getValue();
FSPose::getInstance()->setPose(selected_pose);
}
+
+void FSFloaterPoseStand::setLock(bool enabled)
+{
+ if (enabled)
+ {
+ gAgent.sitDown();
+ }
+ else
+ {
+ gAgent.standUp();
+ }
+ mPoseStandLock = enabled;
+}
\ No newline at end of file
diff --git a/indra/newview/fsfloaterposestand.h b/indra/newview/fsfloaterposestand.h
index 14f07dda3c..a5c058dab8 100644
--- a/indra/newview/fsfloaterposestand.h
+++ b/indra/newview/fsfloaterposestand.h
@@ -23,13 +23,13 @@ class FSFloaterPoseStand
public:
FSFloaterPoseStand(const LLSD& key);
BOOL postBuild();
+ void setLock(bool enabled);
+ void onCommitCombo();
private:
~FSFloaterPoseStand();
-
virtual void onOpen(const LLSD& key);
virtual void onClose(bool app_quitting);
void loadPoses();
- void onCommitCombo();
bool mPoseStandLock;
LLComboBox* mComboPose;
diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp
index 58e184725f..308f9b3f3e 100644
--- a/indra/newview/llviewercontrol.cpp
+++ b/indra/newview/llviewercontrol.cpp
@@ -86,6 +86,7 @@
#include "llfloaterreg.h"
#include "llfloatersidepanelcontainer.h"
#include "llpanelplaces.h"
+#include "fsfloaterposestand.h"
#include "fsfloaterteleporthistory.h"
// Third party library includes
@@ -711,6 +712,20 @@ static void handleUseStandaloneTeleportHistoryFloaterChanged()
}
}
// Clear places / teleport history search filter
+
+// Posestand Ground Lock
+static void handleSetPoseStandLock(const LLSD& newvalue)
+{
+ FSFloaterPoseStand* pose_stand = LLFloaterReg::findTypedInstance("fs_posestand");
+ if (pose_stand)
+ {
+ pose_stand->setLock(newvalue);
+ pose_stand->onCommitCombo();
+ }
+
+}
+// Posestand Ground Lock
+
////////////////////////////////////////////////////////////////////////////
void settings_setup_listeners()
@@ -895,6 +910,9 @@ void settings_setup_listeners()
// Tofu's SSR
gSavedSettings.getControl("FSRenderSSR")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
+
+ // Pose stand ground lock
+ gSavedSettings.getControl("FSPoseStandLock")->getSignal()->connect(boost::bind(&handleSetPoseStandLock, _2));
}
#if TEST_CACHED_CONTROL