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
+7 -9
View File
@@ -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;