diff options
author | Daniel Boles <dboles.src@gmail.com> | 2018-05-05 11:40:43 +0100 |
---|---|---|
committer | Daniel Boles <dboles.src@gmail.com> | 2018-05-05 11:45:43 +0100 |
commit | 133e8fc03fc64d38f3ea884ed46d76dfe571445c (patch) | |
tree | 871ae522e35e813b00ad497a4082ee8a97564a26 | |
parent | 2ce63a86ba689aa41eb47409c889c469497478b0 (diff) | |
download | gtk+-133e8fc03fc64d38f3ea884ed46d76dfe571445c.tar.gz |
ScrolledWindow: Unset cursor if child takes scroll1053-scroll-cursor-gets-left-behind-if-a-child-widget-steals-the-scroll
https://gitlab.gnome.org/GNOME/gtk/issues/1053
-rw-r--r-- | gtk/gtkscrolledwindow.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c index 2fa5ef3d07..8112cfd8e3 100644 --- a/gtk/gtkscrolledwindow.c +++ b/gtk/gtkscrolledwindow.c @@ -1399,6 +1399,8 @@ scroll_history_finish (GtkScrolledWindow *sw, return TRUE; } +static void uninstall_scroll_cursor (GtkScrolledWindow *scrolled_window); + static gboolean captured_event_cb (GtkWidget *widget, GdkEvent *event) @@ -1416,7 +1418,14 @@ captured_event_cb (GtkWidget *widget, if (event->type == GDK_SCROLL) { + GtkWidget *scrollable_child = gtk_bin_get_child (GTK_BIN (widget)); + gtk_scrolled_window_cancel_deceleration (sw); + + /* If a nested widget takes over the scroll, unset our scrolling cursor */ + if (gtk_get_event_widget (event) != scrollable_child) + uninstall_scroll_cursor (sw); + return GDK_EVENT_PROPAGATE; } |