diff options
author | Rider Linden <rider@lindenlab.com> | 2018-09-11 17:10:32 -0700 |
---|---|---|
committer | Rider Linden <rider@lindenlab.com> | 2018-09-11 17:10:32 -0700 |
commit | 4fe44b9033ee793134b7c080c71931c62c33ddf9 (patch) | |
tree | 2ed96112e8d2f60e4cd7a57ee241156223e41de2 /indra/newview | |
parent | 3558377d540de31bdb615f9c0e0df8163b33ccf8 (diff) |
SL-9626: When the panel loses visibility the picker is now automatically closed. Also picker checks handle to parent rather than pointer to parent.
Diffstat (limited to 'indra/newview')
-rw-r--r-- | indra/newview/llpanelenvironment.cpp | 10 | ||||
-rw-r--r-- | indra/newview/llpanelenvironment.h | 2 | ||||
-rw-r--r-- | indra/newview/llsettingspicker.cpp | 16 | ||||
-rw-r--r-- | indra/newview/llsettingspicker.h | 2 |
4 files changed, 20 insertions, 10 deletions
diff --git a/indra/newview/llpanelenvironment.cpp b/indra/newview/llpanelenvironment.cpp index 74cc7660f3..41d7d8b54f 100644 --- a/indra/newview/llpanelenvironment.cpp +++ b/indra/newview/llpanelenvironment.cpp @@ -147,6 +147,12 @@ void LLPanelEnvironmentInfo::onVisibilityChange(BOOL new_visibility) gIdleCallbacks.addFunction(onIdlePlay, this); else { + LLFloaterSettingsPicker *picker = getSettingsPicker(false); + if (picker) + { + picker->closeFloater(); + } + gIdleCallbacks.deleteFunction(onIdlePlay, this); LLFloaterEditExtDayCycle *dayeditor = getEditFloater(); if (mCommitConnection.connected()) @@ -252,12 +258,12 @@ std::string LLPanelEnvironmentInfo::getInventoryNameForAssetId(LLUUID asset_id) return name; } -LLFloaterSettingsPicker *LLPanelEnvironmentInfo::getSettingsPicker() +LLFloaterSettingsPicker * LLPanelEnvironmentInfo::getSettingsPicker(bool create) { LLFloaterSettingsPicker *picker = static_cast<LLFloaterSettingsPicker *>(mSettingsFloater.get()); // Show the dialog - if (!picker) + if (!picker && create) { picker = new LLFloaterSettingsPicker(this, LLUUID::null, "SELECT SETTINGS"); diff --git a/indra/newview/llpanelenvironment.h b/indra/newview/llpanelenvironment.h index 7469da9c05..bd3db34332 100644 --- a/indra/newview/llpanelenvironment.h +++ b/indra/newview/llpanelenvironment.h @@ -125,7 +125,7 @@ protected: std::string getInventoryNameForAssetId(LLUUID asset_id); - LLFloaterSettingsPicker * getSettingsPicker(); + LLFloaterSettingsPicker * getSettingsPicker(bool create = true); LLFloaterEditExtDayCycle * getEditFloater(bool create = true); void updateEditFloater(const LLEnvironment::EnvironmentInfo::ptr_t &nextenv); diff --git a/indra/newview/llsettingspicker.cpp b/indra/newview/llsettingspicker.cpp index c882e7dbbb..06d54825e7 100644 --- a/indra/newview/llsettingspicker.cpp +++ b/indra/newview/llsettingspicker.cpp @@ -59,13 +59,15 @@ namespace LLFloaterSettingsPicker::LLFloaterSettingsPicker(LLView * owner, LLUUID initial_asset_id, const std::string &label, const LLSD ¶ms): LLFloater(params), - mOwner(owner), + mOwnerHandle(), mLabel(label), mActive(true), mContextConeOpacity(0.0f), mSettingAssetID(initial_asset_id), mImmediateFilterPermMask(PERM_NONE) { + mOwnerHandle = owner->getHandle(); + buildFromFile(FLOATER_DEFINITION_XML); setCanMinimize(FALSE); } @@ -136,9 +138,10 @@ void LLFloaterSettingsPicker::onClose(bool app_quitting) return; mCloseSignal(); - if (mOwner) + LLView *owner = mOwnerHandle.get(); + if (owner) { - mOwner->setFocus(TRUE); + owner->setFocus(TRUE); } } @@ -165,13 +168,14 @@ void LLFloaterSettingsPicker::setSettingsFilter(LLSettingsType::type_e type) void LLFloaterSettingsPicker::draw() { - if (mOwner) + LLView *owner = mOwnerHandle.get(); + if (owner) { // draw cone of context pointing back to texture swatch LLRect owner_rect; - mOwner->localRectToOtherView(mOwner->getLocalRect(), &owner_rect, this); + owner->localRectToOtherView(owner->getLocalRect(), &owner_rect, this); LLRect local_rect = getLocalRect(); - if (gFocusMgr.childHasKeyboardFocus(this) && mOwner->isInVisibleChain() && mContextConeOpacity > 0.001f) + if (gFocusMgr.childHasKeyboardFocus(this) && owner->isInVisibleChain() && mContextConeOpacity > 0.001f) { gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); LLGLEnable(GL_CULL_FACE); diff --git a/indra/newview/llsettingspicker.h b/indra/newview/llsettingspicker.h index b3637fd59a..a58fa38ed0 100644 --- a/indra/newview/llsettingspicker.h +++ b/indra/newview/llsettingspicker.h @@ -98,7 +98,7 @@ private: void onButtonSelect(); - LLView* mOwner; + LLHandle<LLView> mOwnerHandle; std::string mLabel; LLUUID mSettingAssetID; LLUUID mDefaultSettingsAssetID; |