From 74627342028d4a2ca7cf4e64d5ea9a07efab87ef Mon Sep 17 00:00:00 2001 From: John Scipione Date: Sat, 24 Aug 2013 23:58:00 -0400 Subject: [PATCH] MenuBar: Fix sticky menu issue. #6408 comment:9 --- src/kits/interface/MenuBar.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/kits/interface/MenuBar.cpp b/src/kits/interface/MenuBar.cpp index 139123e5cd..185e2ac599 100644 --- a/src/kits/interface/MenuBar.cpp +++ b/src/kits/interface/MenuBar.cpp @@ -571,8 +571,9 @@ BMenuBar::_Track(int32* action, int32 startIndex, bool showMenu) // where to store the current mouse position ? // (Or just use the BView mouse hooks) BPoint newWhere; + uint32 newButtons; if (LockLooper()) { - GetMouse(&newWhere, &buttons); + GetMouse(&newWhere, &newButtons); UnlockLooper(); } @@ -630,7 +631,9 @@ BMenuBar::_Track(int32* action, int32 startIndex, bool showMenu) } while (newWhere == where && newButtons == buttons && fState == MENU_STATE_TRACKING); - if (newButtons != 0 && _IsStickyMode()) { + uint32 test = newWhere == where ? 0 : buttons; + + if (newButtons != test && _IsStickyMode()) { if (item == NULL || (item->Submenu() != NULL && item->Submenu()->Window() != NULL)) { // clicked outside the menu bar or on item with already @@ -638,7 +641,7 @@ BMenuBar::_Track(int32* action, int32 startIndex, bool showMenu) fState = MENU_STATE_CLOSED; } else _SetStickyMode(false); - } else if (newButtons == 0 && !_IsStickyMode()) { + } else if (newButtons == test && !_IsStickyMode()) { if ((fSelected != NULL && fSelected->Submenu() == NULL) || item == NULL) { // clicked on an item without a submenu or clicked and