summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2020-09-19 16:45:56 -0400
committerMatthias Clasen <mclasen@redhat.com>2020-09-19 16:48:15 -0400
commit661da6baec21f390466c7f59249fe7b2d5027320 (patch)
tree86471445ae733101df60ac35d2fc91d2b4a42b00
parent6b708e9b602b945d674be05c7b68580d5d7d75bc (diff)
downloadgtk+-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.c6
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);