diff options
author | Matthias Clasen <mclasen@redhat.com> | 2020-11-20 01:46:03 +0000 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2020-11-20 01:46:03 +0000 |
commit | c17227966d431e4f7b9d739ec4ad840cbe98d634 (patch) | |
tree | 2375afaeffe6e1fc7ee37343015bed8e8253a189 | |
parent | 8482b956d697e74d62a968586e7a7a3c7ed03ec6 (diff) | |
parent | 5ab14ff7f62baac591cbf44b6af63e44446c3f1e (diff) | |
download | gtk+-c17227966d431e4f7b9d739ec4ad840cbe98d634.tar.gz |
Merge branch 'wip/carlosg/for-master' into 'master'
gtk/main: Do not unset active state on button release w/o implicit grab
See merge request GNOME/gtk!2869
-rw-r--r-- | gtk/gtkmain.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/gtk/gtkmain.c b/gtk/gtkmain.c index 8b246477be..b9d12e19aa 100644 --- a/gtk/gtkmain.c +++ b/gtk/gtkmain.c @@ -1374,6 +1374,7 @@ handle_pointing_event (GdkEvent *event) double native_x, native_y; GtkWidget *native; GdkEventType type; + gboolean has_implicit; event_widget = gtk_get_event_widget (event); device = gdk_event_get_device (event); @@ -1475,6 +1476,11 @@ handle_pointing_event (GdkEvent *event) target = gtk_window_lookup_effective_pointer_focus_widget (toplevel, device, sequence); + has_implicit = + gtk_window_lookup_pointer_focus_implicit_grab (toplevel, + device, + sequence) != NULL; + gtk_window_set_pointer_focus_grab (toplevel, device, sequence, type == GDK_BUTTON_PRESS ? target : NULL); @@ -1491,7 +1497,10 @@ handle_pointing_event (GdkEvent *event) update_pointer_focus_state (toplevel, event, new_target); } - set_widget_active_state (target, type == GDK_BUTTON_RELEASE); + if (type == GDK_BUTTON_PRESS) + set_widget_active_state (target, FALSE); + else if (has_implicit) + set_widget_active_state (target, TRUE); break; case GDK_SCROLL: |