From 064c536ddd6ca83259cc5f734cfe32d48838f26b Mon Sep 17 00:00:00 2001 From: Angeldark Raymaker Date: Sun, 16 Mar 2025 22:35:51 +0000 Subject: [PATCH] Null check gAgentAvatar usages --- indra/newview/fsfloaterposer.cpp | 37 +++++++++++++++++++++----------- indra/newview/fsfloaterposer.h | 6 ++++++ 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/indra/newview/fsfloaterposer.cpp b/indra/newview/fsfloaterposer.cpp index 51ef0be8b6..425448830f 100644 --- a/indra/newview/fsfloaterposer.cpp +++ b/indra/newview/fsfloaterposer.cpp @@ -253,15 +253,23 @@ void FSFloaterPoser::onFocusLost() LLEditMenuHandler::gEditMenuHandler = nullptr; } } + void FSFloaterPoser::enableVisualManipulators() { + if (!gAgentAvatarp || gAgentAvatarp.isNull()) + { + mToggleVisualManipulators->setToggleState(false); + return; + } + if (LLToolMgr::getInstance()->getCurrentToolset() != gCameraToolset) { mLastToolset = LLToolMgr::getInstance()->getCurrentToolset(); } + LLToolMgr::getInstance()->setCurrentToolset(gPoserToolset); LLToolMgr::getInstance()->getCurrentToolset()->selectTool(FSToolCompPose::getInstance()); - FSToolCompPose::getInstance()->setAvatar( gAgentAvatarp); + FSToolCompPose::getInstance()->setAvatar(gAgentAvatarp); } void FSFloaterPoser::disableVisualManipulators() @@ -1537,6 +1545,7 @@ LLScrollListCtrl* FSFloaterPoser::getScrollListForTab(LLPanel * tabPanel) const LL_WARNS() << "Unknown tab panel: " << tabPanel << LL_ENDL; return nullptr; } + std::vector FSFloaterPoser::getUiSelectedPoserJoints() const { std::vector joints; @@ -1575,21 +1584,23 @@ std::vector FSFloaterPoser::getUiSelectedPoserJo joints.push_back(userData); } } - auto avatarp = getUiSelectedAvatar(); - if (avatarp) - { - if(joints.size() >= 1) - { - FSToolCompPose::getInstance()->setJoint( gAgentAvatarp->getJoint( JointKey::construct(joints[0]->jointName())) ); - } - else - { - FSToolCompPose::getInstance()->setJoint( nullptr ); - } - } + + updateManipWithFirstSelectedJoint(joints); + return joints; } +void FSFloaterPoser::updateManipWithFirstSelectedJoint(std::vector joints) +{ + if (!gAgentAvatarp || gAgentAvatarp.isNull()) + return; + + if (joints.size() >= 1) + FSToolCompPose::getInstance()->setJoint(gAgentAvatarp->getJoint(JointKey::construct(joints[0]->jointName()))); + else + FSToolCompPose::getInstance()->setJoint(nullptr); +} + E_RotationStyle FSFloaterPoser::getUiSelectedBoneRotationStyle(const std::string& jointName) const { if (jointName.empty()) diff --git a/indra/newview/fsfloaterposer.h b/indra/newview/fsfloaterposer.h index 9751250e65..0affb3adb9 100644 --- a/indra/newview/fsfloaterposer.h +++ b/indra/newview/fsfloaterposer.h @@ -132,6 +132,12 @@ public: /// The selected joints std::vector getUiSelectedPoserJoints() const; + /// + /// Updates the visual with the first selected joint from the supplied collection, if any. + /// + /// The collection of selected joints. + static void updateManipWithFirstSelectedJoint(std::vector joints); + /// /// Gets a detectable avatar by its UUID. ///