diff options
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/llui/llfloaterreg.cpp | 36 | 
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  | 
