From 5cc2ed98e27eb3cb597eda5079052498a6b27a1e Mon Sep 17 00:00:00 2001 From: Stefano Ceccherini Date: Wed, 30 Jan 2008 11:34:05 +0000 Subject: [PATCH] Don't close a submenu if the mouse is outside the parent menu. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23790 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kits/interface/Menu.cpp | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/kits/interface/Menu.cpp b/src/kits/interface/Menu.cpp index 445b4db615..cd1c8859a0 100644 --- a/src/kits/interface/Menu.cpp +++ b/src/kits/interface/Menu.cpp @@ -1395,8 +1395,7 @@ BMenu::_Track(int *action, long start) // TODO: cleanup BMenuItem *item = NULL; bigtime_t openTime = system_time(); - bigtime_t closeTime = 0; - + fState = MENU_STATE_TRACKING; if (fSuper != NULL) fSuper->fState = MENU_STATE_TRACKING_SUBMENU; @@ -1457,10 +1456,12 @@ BMenu::_Track(int *action, long start) UnlockLooper(); break; } else { - // Mouse pointer outside menu - - if (system_time() > closeTime + kHysteresis - && fState != MENU_STATE_TRACKING_SUBMENU) { + // Mouse pointer outside menu: + // If there's no other submenu opened, + // deselect the current selected item + if (fSelected != NULL + && (fSelected->Submenu() == NULL + || fSelected->Submenu()->Window() == NULL)) { _SelectItem(NULL); fState = MENU_STATE_TRACKING; } @@ -1494,15 +1495,12 @@ BMenu::_Track(int *action, long start) if (newPollTime <= pollTime) newPollTime = pollTime + 5000; #endif - //printf("newPollTime - pollTime: %lld\n", newPollTime - pollTime); // mouseSpeed in px per ms // (actually point_distance returns the square of the distance, // so it's more px^2 per ms) mouseSpeed = (int32)(point_distance(newLocation, location) * 1000 / (newPollTime - pollTime)); pollTime = newPollTime; - //printf("mouseSpeed = %ld\n", mouseSpeed); - if (newLocation != location || newButtons != buttons) { if (!releasedOnce && newButtons == 0 && buttons != 0) releasedOnce = true;