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
This commit is contained in:
Carlos Garnacho 2016-02-24 17:19:48 +01:00
parent ffea7a267d
commit 60d7f4376e

View File

@ -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));