fix a likely logic error in GtkMenu handling of enter events
On macOS popping up a menu with a position function that leads the menu to be under the mouse pointer generates the same initial set of enter events as on linux, but this is then followed by some leave events and then a repeat of the same set of enter events. this exposes what appears to be a logic error in gtk_menu_enter_notify(). Nonlinear enter events (i.e. where the menu pops up under the mouse, so the mouse was never actually moved into the menu's window) should not cause a reset of priv->seen_item_enter. This value, when true, is used to force the next received button release event to be handle as an menu activation event. This should only happen when the mouse has actually been moved by the user into the menu (as already indicated in existing comments). The value has this effect by, on the next enter event for a menu item, if already set, forcing menu->activate_time to zero, which in turn will cause menu activation on button up/release. This bug doesn't appear on Linux (or Windows) because the event sequence associated with a menu popup is different. The lack of another set of enter events means that menu->activate_time is never reset, and so the behavior is as expected. This change makes the setting of priv->seen_item_enter be idempotent with respect to non-linear enter events, which I believe is the intended behavior.
This commit is contained in:
parent
bd5e85780a
commit
f8f6c89136
@ -3906,9 +3906,8 @@ gtk_menu_enter_notify (GtkWidget *widget,
|
||||
*/
|
||||
menu_shell->activate_time = 0;
|
||||
}
|
||||
priv->seen_item_enter = TRUE;
|
||||
}
|
||||
|
||||
priv->seen_item_enter = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user