In the menubar tracking function, loop indefinitely if mouse stands

still. This way keyboard menu navigation works much better. 
Unfortunately I can't apply the same trick for BMenu since it opens the 
submenu with a delay, and that won't work anymore.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24296 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Stefano Ceccherini
2008-03-07 21:26:36 +00:00
parent c8fe52608c
commit 556f83c6f7
+15 -7
View File
@@ -531,14 +531,22 @@ BMenuBar::_Track(int32 *action, int32 startIndex, bool showMenu)
window->Unlock(); window->Unlock();
if (fState != MENU_STATE_CLOSED) { if (fState != MENU_STATE_CLOSED) {
if (snoozeAmount > 0) // if user doesn't move the mouse, loop here,
snooze(snoozeAmount); // so we don't interfer with keyboard menu navigation
BPoint newLocation;
uint32 newButtons;
do {
snooze(snoozeAmount);
if (!LockLooper())
break;
GetMouse(&newLocation, &newButtons, true);
UnlockLooper();
} while (newLocation == where
&& newButtons == buttons);
if (window->Lock()) { where = newLocation;
GetMouse(&where, &buttons, true); buttons = newButtons;
window->Unlock();
}
if (buttons != 0 && _IsStickyMode()) { if (buttons != 0 && _IsStickyMode()) {
if (menuItem == NULL) if (menuItem == NULL)