summaryrefslogtreecommitdiff
path: root/indra/llui
diff options
context:
space:
mode:
authorandreykproductengine <andreykproductengine@lindenlab.com>2019-10-28 18:27:13 +0200
committerandreykproductengine <andreykproductengine@lindenlab.com>2019-10-28 18:27:13 +0200
commit8ccf79735ec399cc6b88f25cd2ceafac6858ecd2 (patch)
treeea57c4c7ec66fc97e75824e082d542d462ee856f /indra/llui
parent317dd0e405dfb6ca813118c556f5c23af27cd2a7 (diff)
SL-6109 Fixed conflict resolution issue caused by menu accelerators
Diffstat (limited to 'indra/llui')
-rw-r--r--indra/llui/llmenugl.cpp53
-rw-r--r--indra/llui/llmenugl.h7
2 files changed, 36 insertions, 24 deletions
diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp
index 986f3362b7..5c8c30e6ac 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);
@@ -3001,6 +3012,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
@@ -3514,27 +3546,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 0653864892..f3844af507 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;
@@ -632,6 +634,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
@@ -792,8 +795,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 );