diff options
| author | andreykproductengine <andreykproductengine@lindenlab.com> | 2019-10-28 18:27:13 +0200 | 
|---|---|---|
| committer | Andrey Kleshchev <andreykproductengine@lindenlab.com> | 2020-06-23 14:50:03 +0300 | 
| commit | 62214b53f09c453dc410465ba6e64a772562e6db (patch) | |
| tree | b3f0f8797c7efa3c1f7da0c436dde685e0d9290c /indra/llui | |
| parent | 6597c7696783ce56f89b34a4b6440363635be6a6 (diff) | |
SL-6109 Fixed conflict resolution issue caused by menu accelerators
Diffstat (limited to 'indra/llui')
| -rw-r--r-- | indra/llui/llmenugl.cpp | 53 | ||||
| -rw-r--r-- | indra/llui/llmenugl.h | 7 | 
2 files changed, 36 insertions, 24 deletions
| diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp index d97bf2d674..b87819102b 100644 --- a/indra/llui/llmenugl.cpp +++ b/indra/llui/llmenugl.cpp @@ -213,6 +213,12 @@ LLSD LLMenuItemGL::getValue() const  }  //virtual +bool LLMenuItemGL::hasAccelerator(const KEY &key, const MASK &mask) const +{ +	return (mAcceleratorKey == key) && (mAcceleratorMask == mask); +} + +//virtual  BOOL LLMenuItemGL::handleAcceleratorKey(KEY key, MASK mask)  {  	if( getEnabled() && (!gKeyboard->getKeyRepeated(key) || mAllowKeyRepeat) && (key == mAcceleratorKey) && (mask == (mAcceleratorMask & MASK_NORMALKEYS)) ) @@ -1017,6 +1023,11 @@ BOOL LLMenuItemBranchGL::handleMouseUp(S32 x, S32 y, MASK mask)  	return TRUE;  } +bool LLMenuItemBranchGL::hasAccelerator(const KEY &key, const MASK &mask) const +{ +	return getBranch() && getBranch()->hasAccelerator(key, mask); +} +  BOOL LLMenuItemBranchGL::handleAcceleratorKey(KEY key, MASK mask)  {  	return getBranch() && getBranch()->handleAcceleratorKey(key, mask); @@ -3023,6 +3034,27 @@ void LLMenuGL::updateParent(LLView* parentp)  	}  } +bool LLMenuGL::hasAccelerator(const KEY &key, const MASK &mask) const +{ +	if (key == KEY_NONE) +	{ +		return false; +	} +	// Note: checking this way because mAccelerators seems to be broken +	// mAccelerators probably needs to be cleaned up or fixed +	// It was used for dupplicate accelerator avoidance. +	item_list_t::const_iterator item_iter; +	for (item_iter = mItems.begin(); item_iter != mItems.end(); ++item_iter) +	{ +		LLMenuItemGL* itemp = *item_iter; +		if (itemp->hasAccelerator(key, mask)) +		{ +			return true; +		} +	} +	return false; +} +  BOOL LLMenuGL::handleAcceleratorKey(KEY key, MASK mask)  {  	// don't handle if not enabled @@ -3536,27 +3568,6 @@ S32 LLMenuBarGL::getRightmostMenuEdge()  	return (*item_iter)->getRect().mRight;  } -bool LLMenuBarGL::hasAccelerator(const KEY &key, const MASK &mask) const -{ -    if (key == KEY_NONE) -    { -        return false; -    } - -    LLMenuKeyboardBinding *accelerator = NULL; -    std::list<LLMenuKeyboardBinding*>::const_iterator list_it; -    for (list_it = mAccelerators.begin(); list_it != mAccelerators.end(); ++list_it) -    { -        accelerator = *list_it; -        if ((accelerator->mKey == key) && (accelerator->mMask == (mask & MASK_NORMALKEYS))) -        { -            return true; -        } -    } - -    return false; -} -  // add a vertical separator to this menu  BOOL LLMenuBarGL::addSeparator()  { diff --git a/indra/llui/llmenugl.h b/indra/llui/llmenugl.h index adcb2ca2f9..8cef9c6463 100644 --- a/indra/llui/llmenugl.h +++ b/indra/llui/llmenugl.h @@ -98,6 +98,7 @@ public:  	/*virtual*/ void setValue(const LLSD& value);  	/*virtual*/ LLSD getValue() const; +	virtual bool hasAccelerator(const KEY &key, const MASK &mask) const;  	virtual BOOL handleAcceleratorKey(KEY key, MASK mask);  	LLColor4 getHighlightBgColor() { return mHighlightBackground.get(); } @@ -443,7 +444,8 @@ public:  	/*virtual*/ bool addChild(LLView* view, S32 tab_group = 0);  	/*virtual*/ void removeChild( LLView* ctrl);  	/*virtual*/ BOOL postBuild(); - +	 +	virtual bool hasAccelerator(const KEY &key, const MASK &mask) const;  	virtual BOOL handleAcceleratorKey(KEY key, MASK mask);  	LLMenuGL* findChildMenuByName(const std::string& name, BOOL recurse) const; @@ -635,6 +637,7 @@ public:  	virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); +	virtual bool hasAccelerator(const KEY &key, const MASK &mask) const;  	virtual BOOL handleAcceleratorKey(KEY key, MASK mask);  	// check if we've used these accelerators already @@ -795,8 +798,6 @@ public:  	void resetMenuTrigger() { mAltKeyTrigger = FALSE; } -	bool hasAccelerator(const KEY &key, const MASK &mask) const; -  private:  	// add a menu - this will create a drop down menu.  	virtual BOOL appendMenu( LLMenuGL* menu ); | 
