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:
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user