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
This commit is contained in:
Stefano Ceccherini
2008-01-30 11:34:05 +00:00
parent 9d73eec0ef
commit 5cc2ed98e2
+6 -8
View File
@@ -1395,7 +1395,6 @@ BMenu::_Track(int *action, long start)
// TODO: cleanup // TODO: cleanup
BMenuItem *item = NULL; BMenuItem *item = NULL;
bigtime_t openTime = system_time(); bigtime_t openTime = system_time();
bigtime_t closeTime = 0;
fState = MENU_STATE_TRACKING; fState = MENU_STATE_TRACKING;
if (fSuper != NULL) if (fSuper != NULL)
@@ -1457,10 +1456,12 @@ BMenu::_Track(int *action, long start)
UnlockLooper(); UnlockLooper();
break; break;
} else { } else {
// Mouse pointer outside menu // Mouse pointer outside menu:
// If there's no other submenu opened,
if (system_time() > closeTime + kHysteresis // deselect the current selected item
&& fState != MENU_STATE_TRACKING_SUBMENU) { if (fSelected != NULL
&& (fSelected->Submenu() == NULL
|| fSelected->Submenu()->Window() == NULL)) {
_SelectItem(NULL); _SelectItem(NULL);
fState = MENU_STATE_TRACKING; fState = MENU_STATE_TRACKING;
} }
@@ -1494,15 +1495,12 @@ BMenu::_Track(int *action, long start)
if (newPollTime <= pollTime) if (newPollTime <= pollTime)
newPollTime = pollTime + 5000; newPollTime = pollTime + 5000;
#endif #endif
//printf("newPollTime - pollTime: %lld\n", newPollTime - pollTime);
// mouseSpeed in px per ms // mouseSpeed in px per ms
// (actually point_distance returns the square of the distance, // (actually point_distance returns the square of the distance,
// so it's more px^2 per ms) // so it's more px^2 per ms)
mouseSpeed = (int32)(point_distance(newLocation, location) * 1000 / (newPollTime - pollTime)); mouseSpeed = (int32)(point_distance(newLocation, location) * 1000 / (newPollTime - pollTime));
pollTime = newPollTime; pollTime = newPollTime;
//printf("mouseSpeed = %ld\n", mouseSpeed);
if (newLocation != location || newButtons != buttons) { if (newLocation != location || newButtons != buttons) {
if (!releasedOnce && newButtons == 0 && buttons != 0) if (!releasedOnce && newButtons == 0 && buttons != 0)
releasedOnce = true; releasedOnce = true;