forked from AuroraMiddleware/gtk
wayland: Set a more believable crossing detail on pointer enter/leave
GDK_NOTIFY_ANCESTOR would happen when the pointer crosses across a direct parent/child. However nonlinear events are more likely, specially when the pointer moves across toplevels (either different apps, or menus being popped up over the pointer position). This makes popping up comboboxes and other menus that fall over the pointer position possible. With the previous detail the GtkMenu code misinterpreted the crossing event, making it think the button release coming right after should dismiss the popup, which made menus just flash on the screen unless you kept the button pressed.
This commit is contained in:
parent
c05dc28952
commit
7ab250c10c
@ -881,7 +881,7 @@ pointer_handle_enter (void *data,
|
|||||||
event->crossing.subwindow = NULL;
|
event->crossing.subwindow = NULL;
|
||||||
event->crossing.time = (guint32)(g_get_monotonic_time () / 1000);
|
event->crossing.time = (guint32)(g_get_monotonic_time () / 1000);
|
||||||
event->crossing.mode = GDK_CROSSING_NORMAL;
|
event->crossing.mode = GDK_CROSSING_NORMAL;
|
||||||
event->crossing.detail = GDK_NOTIFY_ANCESTOR;
|
event->crossing.detail = GDK_NOTIFY_NONLINEAR;
|
||||||
event->crossing.focus = TRUE;
|
event->crossing.focus = TRUE;
|
||||||
event->crossing.state = 0;
|
event->crossing.state = 0;
|
||||||
|
|
||||||
@ -928,7 +928,7 @@ pointer_handle_leave (void *data,
|
|||||||
event->crossing.subwindow = NULL;
|
event->crossing.subwindow = NULL;
|
||||||
event->crossing.time = (guint32)(g_get_monotonic_time () / 1000);
|
event->crossing.time = (guint32)(g_get_monotonic_time () / 1000);
|
||||||
event->crossing.mode = GDK_CROSSING_NORMAL;
|
event->crossing.mode = GDK_CROSSING_NORMAL;
|
||||||
event->crossing.detail = GDK_NOTIFY_ANCESTOR;
|
event->crossing.detail = GDK_NOTIFY_NONLINEAR;
|
||||||
event->crossing.focus = TRUE;
|
event->crossing.focus = TRUE;
|
||||||
event->crossing.state = 0;
|
event->crossing.state = 0;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user