diff options
author | Matthias Clasen <mclasen@redhat.com> | 2020-09-19 16:45:56 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2020-09-19 16:48:15 -0400 |
commit | 661da6baec21f390466c7f59249fe7b2d5027320 (patch) | |
tree | 86471445ae733101df60ac35d2fc91d2b4a42b00 | |
parent | 6b708e9b602b945d674be05c7b68580d5d7d75bc (diff) | |
download | gtk+-fix-hover-tracking.tar.gz |
main: Update pointer focus state for button releasesfix-hover-tracking
Failure to do so makes the old pointer focus target
'sticky', because we end up ignoring the result of
picking the pointer focus until a motion event comes
in.
Fixes: #3172
-rw-r--r-- | gtk/gtkmain.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/gtk/gtkmain.c b/gtk/gtkmain.c index a72801e8dd..10780b7684 100644 --- a/gtk/gtkmain.c +++ b/gtk/gtkmain.c @@ -1477,17 +1477,19 @@ handle_pointing_event (GdkEvent *event) device, sequence); gtk_window_set_pointer_focus_grab (toplevel, device, sequence, - type == GDK_BUTTON_PRESS ? - target : NULL); + type == GDK_BUTTON_PRESS ? target : NULL); if (type == GDK_BUTTON_RELEASE) { GtkWidget *new_target = gtk_widget_pick (native, x, y, GTK_PICK_DEFAULT); + if (new_target == NULL) new_target = GTK_WIDGET (toplevel); + gtk_synthesize_crossing_events (GTK_ROOT (toplevel), GTK_CROSSING_POINTER, target, new_target, event, GDK_CROSSING_UNGRAB, NULL); gtk_window_maybe_update_cursor (toplevel, NULL, device); + update_pointer_focus_state (toplevel, event, new_target); } set_widget_active_state (target, type == GDK_BUTTON_RELEASE); |