summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2013-06-10 14:55:54 +0200
committerAlexander Larsson <alexl@redhat.com>2013-06-10 16:04:50 +0200
commitbb80ec0d211badc809e9e72373f8ea2b97f6a885 (patch)
tree9341388b6ff306e8150d0294cf09e7c9732965d1
parent0ca74e267305c67c1357ccbd357d004e778f1385 (diff)
downloadgtk+-bb80ec0d211badc809e9e72373f8ea2b97f6a885.tar.gz
GtkScrollableWindow: Automatically set focus adjustments
When adding with a viewport we automatically set the focus adjustments on the viewport from the scrolled window, so that when any child widget gets focused we automatically scroll to it. This is generally nice, but its particularly important for GtkListBox where focus changing is how we navigate between rows. We also ensure that the adjustments are always set before adding the child to the viewport, which we will need later to pick up the adjustments on add.
-rw-r--r--gtk/gtkscrolledwindow.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
index 19df070f54..3201225d12 100644
--- a/gtk/gtkscrolledwindow.c
+++ b/gtk/gtkscrolledwindow.c
@@ -3040,14 +3040,21 @@ gtk_scrolled_window_add (GtkContainer *container,
scrolled_window = GTK_SCROLLED_WINDOW (container);
priv = scrolled_window->priv;
+ hadj = gtk_range_get_adjustment (GTK_RANGE (priv->hscrollbar));
+ vadj = gtk_range_get_adjustment (GTK_RANGE (priv->vscrollbar));
+
if (GTK_IS_SCROLLABLE (child))
{
scrollable_child = child;
}
else
{
- scrollable_child = gtk_viewport_new (NULL, NULL);
+ scrollable_child = gtk_viewport_new (hadj, vadj);
gtk_widget_show (scrollable_child);
+ gtk_container_set_focus_hadjustment (GTK_CONTAINER (scrollable_child),
+ gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
+ gtk_container_set_focus_vadjustment (GTK_CONTAINER (scrollable_child),
+ gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
gtk_container_add (GTK_CONTAINER (scrollable_child), child);
}
@@ -3057,9 +3064,6 @@ gtk_scrolled_window_add (GtkContainer *container,
_gtk_bin_set_child (bin, scrollable_child);
gtk_widget_set_parent (scrollable_child, GTK_WIDGET (bin));
- hadj = gtk_range_get_adjustment (GTK_RANGE (priv->hscrollbar));
- vadj = gtk_range_get_adjustment (GTK_RANGE (priv->vscrollbar));
-
g_object_set (scrollable_child, "hadjustment", hadj, "vadjustment", vadj, NULL);
}
@@ -3129,6 +3133,10 @@ gtk_scrolled_window_add_with_viewport (GtkScrolledWindow *scrolled_window,
viewport =
gtk_viewport_new (gtk_scrolled_window_get_hadjustment (scrolled_window),
gtk_scrolled_window_get_vadjustment (scrolled_window));
+ gtk_container_set_focus_hadjustment (GTK_CONTAINER (viewport),
+ gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
+ gtk_container_set_focus_vadjustment (GTK_CONTAINER (viewport),
+ gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
gtk_container_add (GTK_CONTAINER (scrolled_window), viewport);
}