From 60d7f4376ea5ff1722cd20aced72c167372d2a38 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Wed, 24 Feb 2016 17:19:48 +0100 Subject: [PATCH] GtkTextHandle: Look up for the first child of a scrolled window found Text handles use to connect to the first GtkScrollable up the hierarchy so they can be repositioned when scrolling. It makes more sense to look up the first child of a GtkScrolledWindow, it must be an scrollable too, and will be the scrollable that can actually change the position of the text handles. https://bugzilla.gnome.org/show_bug.cgi?id=761676 --- gtk/gtktexthandle.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/gtk/gtktexthandle.c b/gtk/gtktexthandle.c index 5ed6ebce31..cc98d226a0 100644 --- a/gtk/gtktexthandle.c +++ b/gtk/gtktexthandle.c @@ -544,6 +544,21 @@ _gtk_text_handle_update_scrollable (GtkTextHandle *handle, handle); } +static GtkWidget * +gtk_text_handle_lookup_scrollable (GtkTextHandle *handle) +{ + GtkTextHandlePrivate *priv; + GtkWidget *scrolled_window; + + priv = handle->priv; + scrolled_window = gtk_widget_get_ancestor (priv->parent, + GTK_TYPE_SCROLLED_WINDOW); + if (!scrolled_window) + return NULL; + + return gtk_bin_get_child (GTK_BIN (scrolled_window)); +} + static void _gtk_text_handle_parent_hierarchy_changed (GtkWidget *widget, GtkWindow *previous_toplevel, @@ -574,7 +589,7 @@ _gtk_text_handle_parent_hierarchy_changed (GtkWidget *widget, } } - scrollable = gtk_widget_get_ancestor (widget, GTK_TYPE_SCROLLABLE); + scrollable = gtk_text_handle_lookup_scrollable (handle); _gtk_text_handle_update_scrollable (handle, GTK_SCROLLABLE (scrollable)); } @@ -603,7 +618,7 @@ _gtk_text_handle_set_parent (GtkTextHandle *handle, G_CALLBACK (_gtk_text_handle_parent_hierarchy_changed), handle); - scrollable = gtk_widget_get_ancestor (parent, GTK_TYPE_SCROLLABLE); + scrollable = gtk_text_handle_lookup_scrollable (handle); } _gtk_text_handle_update_scrollable (handle, GTK_SCROLLABLE (scrollable));