diff options
author | Matthias Clasen <mclasen@redhat.com> | 2020-08-26 07:57:07 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2020-08-26 19:43:13 -0400 |
commit | 1c74e4a509c59ac3547373d5ff9c7d858dbf272c (patch) | |
tree | f7f6d1333f6a6b6baa932659048c35bd3df2b33d | |
parent | 686ced2a79ccd7fcff6b903c081cd2845de9827f (diff) | |
download | gtk+-wip/synthetic-motion2.tar.gz |
idle sizer: Request a motion event after layoutwip/synthetic-motion2
When we are reallocating widgets, make sure that
we get a motion event in the next frame cycle,
so the hover state gets updated.
-rw-r--r-- | gtk/gtkroot.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/gtk/gtkroot.c b/gtk/gtkroot.c index 24d3860b1d..93f6e7c5fd 100644 --- a/gtk/gtkroot.c +++ b/gtk/gtkroot.c @@ -199,7 +199,21 @@ gtk_root_layout_cb (GdkFrameClock *clock, * since it doesn't cause any actual harm. */ if (gtk_widget_needs_allocate (widget)) - gtk_native_check_resize (GTK_NATIVE (self)); + { + gtk_native_check_resize (GTK_NATIVE (self)); + if (GTK_IS_WINDOW (widget)) + { + GtkWidget *focus; + GdkSeat *seat; + GdkDevice *device; + + seat = gdk_display_get_default_seat (gtk_widget_get_display (widget)); + device = gdk_seat_get_pointer (seat); + focus = gtk_window_lookup_pointer_focus_widget (GTK_WINDOW (widget), device, NULL); + if (focus) + gdk_surface_request_motion (gtk_native_get_surface (gtk_widget_get_native (focus))); + } + } if (!gtk_root_needs_layout (self)) gtk_root_stop_layout (self); |