From 8dd355de0bff4ed0e4d96b2f0d5b81aedf6a77ba Mon Sep 17 00:00:00 2001 From: Cinders Date: Mon, 18 Mar 2013 11:48:21 -0600 Subject: [PATCH] FIRE-9495: Make posestand lock toggle behave as expected. --- indra/newview/fsfloaterposestand.cpp | 20 +++++++++++++++++--- indra/newview/fsfloaterposestand.h | 4 ++-- indra/newview/llviewercontrol.cpp | 18 ++++++++++++++++++ 3 files changed, 37 insertions(+), 5 deletions(-) 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