diff options
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/llui/llfloater.cpp | 72 | ||||
| -rw-r--r-- | indra/llui/llfloater.h | 7 | ||||
| -rw-r--r-- | indra/llui/llresizebar.cpp | 7 | ||||
| -rw-r--r-- | indra/newview/llviewermenufile.cpp | 11 | 
4 files changed, 30 insertions, 67 deletions
| diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index 8ca1e685a9..ad64a9a5e5 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -1103,6 +1103,10 @@ void LLFloater::handleReshape(const LLRect& new_rect, bool by_user)  	if (by_user && !isMinimized())  	{ +		if (isDocked()) +		{ +			setDocked( false, false); +		}  		storeRectControl();  		mPositioning = LLFloaterEnums::POSITIONING_RELATIVE;  		LLRect screen_rect = calcScreenRect(); @@ -1707,56 +1711,10 @@ void LLFloater::onClickHelp( LLFloater* self )  	}  } -// static  -LLFloater* LLFloater::getClosableFloaterFromFocus() -{ -	LLFloater* focused_floater = NULL; -	LLInstanceTracker<LLFloater>::instance_iter it = beginInstances(); -	LLInstanceTracker<LLFloater>::instance_iter end_it = endInstances(); -	for (; it != end_it; ++it) -	{ -		if (it->hasFocus()) -		{ -			LLFloater& floater = *it; -			focused_floater = &floater; -			break; -		} -	} - -	if (it == endInstances()) -	{ -		// nothing found, return -		return NULL; -	} - -	// The focused floater may not be closable, -	// Find and close a parental floater that is closeable, if any. -	LLFloater* prev_floater = NULL; -	for(LLFloater* floater_to_close = focused_floater; -		NULL != floater_to_close;  -		floater_to_close = gFloaterView->getParentFloater(floater_to_close)) -	{ -		if(floater_to_close->isCloseable()) -		{ -			return floater_to_close; -		} - -		// If floater has as parent root view -		// gFloaterView->getParentFloater(floater_to_close) returns -		// the same floater_to_close, so we need to check this. -		if (prev_floater == floater_to_close) { -			break; -		} -		prev_floater = floater_to_close; -	} - -	return NULL; -} -  // static -void LLFloater::closeFocusedFloater() +void LLFloater::closeFrontmostFloater()  { -	LLFloater* floater_to_close = LLFloater::getClosableFloaterFromFocus(); +	LLFloater* floater_to_close = gFloaterView->getFrontmostClosableFloater();  	if(floater_to_close)  	{  		floater_to_close->closeFloater(); @@ -2474,6 +2432,24 @@ void LLFloaterView::highlightFocusedFloater()  	}  } +LLFloater* LLFloaterView::getFrontmostClosableFloater() +{ +	child_list_const_iter_t child_it; +	LLFloater* frontmost_floater = NULL; + +	for ( child_it = getChildList()->begin(); child_it != getChildList()->end(); ++child_it) +	{ +		frontmost_floater = (LLFloater *)(*child_it); + +		if (frontmost_floater->isInVisibleChain() && frontmost_floater->isCloseable()) +		{ +			return frontmost_floater; +		} +	} + +	return NULL; +} +  void LLFloaterView::unhighlightFocusedFloater()  {  	for ( child_list_const_iter_t child_it = getChildList()->begin(); child_it != getChildList()->end(); ++child_it) diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h index 64d6dcea04..0484ca622b 100644 --- a/indra/llui/llfloater.h +++ b/indra/llui/llfloater.h @@ -325,12 +325,10 @@ public:  	virtual void    setTornOff(bool torn_off) { mTornOff = torn_off; } -	// Return a closeable floater, if any, given the current focus. -	static LLFloater* getClosableFloaterFromFocus();  -	// Close the floater returned by getClosableFloaterFromFocus() and  +	// Close the floater returned by getFrontmostClosableFloater() and   	// handle refocusing. -	static void		closeFocusedFloater(); +	static void		closeFrontmostFloater();  //	LLNotification::Params contextualNotification(const std::string& name)   //	{  @@ -559,6 +557,7 @@ public:  	S32 getZOrder(LLFloater* child);  	void setFloaterSnapView(LLHandle<LLView> snap_view) {mSnapView = snap_view; } +	LLFloater* getFrontmostClosableFloater();   private:  	void hiddenFloaterClosed(LLFloater* floater); diff --git a/indra/llui/llresizebar.cpp b/indra/llui/llresizebar.cpp index 87aeb4d7a7..85e0aba824 100644 --- a/indra/llui/llresizebar.cpp +++ b/indra/llui/llresizebar.cpp @@ -139,13 +139,6 @@ BOOL LLResizeBar::handleHover(S32 x, S32 y, MASK mask)  		if( valid_rect.localPointInRect( screen_x, screen_y ) && mResizingView )  		{ -			// undock floater when user resize it -			LLFloater* parent = dynamic_cast<LLFloater*>( getParent()); -			if (parent && parent->isDocked()) -			{ -				parent->setDocked( false, false); -			} -  			// Resize the parent  			LLRect orig_rect = mResizingView->getRect();  			LLRect scaled_rect = orig_rect; diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp index 21a323941d..be78603e2d 100644 --- a/indra/newview/llviewermenufile.cpp +++ b/indra/newview/llviewermenufile.cpp @@ -476,8 +476,8 @@ class LLFileEnableCloseWindow : public view_listener_t  {  	bool handleEvent(const LLSD& userdata)  	{ -		bool new_value = NULL != LLFloater::getClosableFloaterFromFocus(); -		return new_value || LLFloaterMap::getInstance()->isInVisibleChain(); +		bool new_value = NULL != gFloaterView->getFrontmostClosableFloater(); +		return new_value;  	}  }; @@ -485,12 +485,7 @@ class LLFileCloseWindow : public view_listener_t  {  	bool handleEvent(const LLSD& userdata)  	{ -		bool new_value = (NULL == LLFloater::getClosableFloaterFromFocus()); -		if(new_value && LLFloaterMap::getInstance()->isInVisibleChain()) -		{ -			LLFloaterMap::getInstance()->closeFloater(false); -		} -		LLFloater::closeFocusedFloater(); +		LLFloater::closeFrontmostFloater();  		return true;  	}  }; | 
