diff options
author | Andrey Kleshchev <andreykproductengine@lindenlab.com> | 2021-05-12 14:25:46 +0300 |
---|---|---|
committer | Andrey Kleshchev <andreykproductengine@lindenlab.com> | 2021-05-12 20:25:04 +0300 |
commit | 3917de54db0dacf2aaa4f8af083db632c6a51365 (patch) | |
tree | 6194df3e747dfc2271fa911aba951ecfe4b78bc5 | |
parent | 87f1d6071ee480c5dfcf15f6da3f9a9b9766d723 (diff) |
SL-15245 Multiple guide books open, but cannot close them all
Opening and closing single-instance floaters rapidly and multiple times could result in cleaning instance from floaterreg twice, thus removing new isntance instead of current one
-rw-r--r-- | indra/llui/llfloater.cpp | 7 | ||||
-rw-r--r-- | indra/newview/llurlfloaterdispatchhandler.cpp | 3 |
2 files changed, 9 insertions, 1 deletions
diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index 3680e20f15..8ceb411ede 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -510,7 +510,12 @@ void LLFloater::destroy() // virtual LLFloater::~LLFloater() { - LLFloaterReg::removeInstance(mInstanceName, mKey); + if (!isDead()) + { + // If it's dead, instance is supposed to be already removed, and + // in case of single instance we can remove new one by accident + LLFloaterReg::removeInstance(mInstanceName, mKey); + } if( gFocusMgr.childHasKeyboardFocus(this)) { diff --git a/indra/newview/llurlfloaterdispatchhandler.cpp b/indra/newview/llurlfloaterdispatchhandler.cpp index ec2e423c64..0343485864 100644 --- a/indra/newview/llurlfloaterdispatchhandler.cpp +++ b/indra/newview/llurlfloaterdispatchhandler.cpp @@ -54,6 +54,7 @@ const std::string FLOATER_GUIDEBOOK("guidebook"); // alias for how_to const std::string FLOATER_HOW_TO("how_to"); const std::string FLOATER_WEB_CONTENT("web_content"); +// All arguments are palceholders! Server side will need to add validation first. // Web content universal argument const std::string KEY_TRUSTED_CONTENT("trusted_content"); @@ -105,6 +106,8 @@ bool LLUrlFloaterDispatchHandler::operator()(const LLDispatcher *, const std::st } } + // At the moment command_params is a placeholder and code treats it as map + // Once server side adds argument validation this will be either a map or an array std::string floater; LLSD command_params; std::string url; |