summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Boles <dboles.src@gmail.com>2018-05-05 11:40:43 +0100
committerDaniel Boles <dboles.src@gmail.com>2018-05-05 11:45:43 +0100
commit133e8fc03fc64d38f3ea884ed46d76dfe571445c (patch)
tree871ae522e35e813b00ad497a4082ee8a97564a26
parent2ce63a86ba689aa41eb47409c889c469497478b0 (diff)
downloadgtk+-1053-scroll-cursor-gets-left-behind-if-a-child-widget-steals-the-scroll.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.c9
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;
}