summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
authorMerov Linden <merov@lindenlab.com>2011-09-29 15:02:28 -0700
committerMerov Linden <merov@lindenlab.com>2011-09-29 15:02:28 -0700
commitfc9c94864d9407e43b97619b530402728f5622ca (patch)
tree199b229d9f4343a2db1074e47e377aa6c08e872d /indra
parentb07e7c7198fbc78ca852b3ba48d516ec2901da21 (diff)
parent896ea6f81eaf409aae22158816226f09a459ca34 (diff)
EXP-1202 : pull from richard/viewer-experience-fui
Diffstat (limited to 'indra')
-rw-r--r--indra/llui/llfloaterreg.cpp36
1 files changed, 33 insertions, 3 deletions
diff --git a/indra/llui/llfloaterreg.cpp b/indra/llui/llfloaterreg.cpp
index bc740dde17..8a0513f246 100644
--- a/indra/llui/llfloaterreg.cpp
+++ b/indra/llui/llfloaterreg.cpp
@@ -455,12 +455,42 @@ void LLFloaterReg::toggleFloaterInstance(const LLSD& sdname)
//static
void LLFloaterReg::toggleToolbarFloaterInstance(const LLSD& sdname)
{
- // Do some extra logic here for 3-state toolbar floater toggling madness :)
-
+ //
+ // Floaters controlled by the toolbar behave a bit differently from others.
+ // Namely they have 3-4 states as defined in the design wiki page here:
+ // https://wiki.lindenlab.com/wiki/FUI_Button_states
+ //
+ // The basic idea is this:
+ // * If the target floater is minimized, this button press will un-minimize it.
+ // * Else if the target floater is closed open it.
+ // * Else if the target floater does not have focus, give it focus.
+ // * Also, if it is not on top, bring it forward when focus is given.
+ // * Else the target floater is open, close it.
+ //
+
+ // First parse the parameter
LLSD key;
std::string name = sdname.asString();
parse_name_key(name, key);
- toggleInstance(name, key);
+
+ LLFloater* instance = findInstance(name, key);
+
+ if (LLFloater::isMinimized(instance))
+ {
+ instance->setMinimized(FALSE);
+ }
+ else if (!LLFloater::isShown(instance))
+ {
+ showInstance(name, key, TRUE);
+ }
+ else if (!instance->hasFocus())
+ {
+ instance->setFocus(TRUE);
+ }
+ else
+ {
+ instance->closeFloater();
+ }
}
//static