summaryrefslogtreecommitdiff
path: root/gtk/gtkscrolledwindow.c
diff options
context:
space:
mode:
authorCosimo Cecchi <cosimoc@gnome.org>2013-02-01 17:03:44 +0100
committerMatthias Clasen <mclasen@redhat.com>2013-02-01 22:58:53 -0500
commit9efa28591cc49c33e8fb6a66a5e888c57b9b3b3f (patch)
tree2a44cf586702056d43f24bdcf399c3565b7e31e0 /gtk/gtkscrolledwindow.c
parent5f41eb74a5fefc194b18c8dc62202b86740fd22f (diff)
downloadgtk+-9efa28591cc49c33e8fb6a66a5e888c57b9b3b3f.tar.gz
scrolledwindow: make gtk_scrolled_window_add() smart
There's really no reason why we shouldn't automatically create a GtkViewport when the widget added to GtkScrolledWindow is not a GtkScrollable, instead of just printing a g_warning. Copy the viewport special case into the scrolled window implementation of gtk_container_add(). https://bugzilla.gnome.org/show_bug.cgi?id=693015
Diffstat (limited to 'gtk/gtkscrolledwindow.c')
-rw-r--r--gtk/gtkscrolledwindow.c29
1 files changed, 18 insertions, 11 deletions
diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
index 230fab6842..665c57049e 100644
--- a/gtk/gtkscrolledwindow.c
+++ b/gtk/gtkscrolledwindow.c
@@ -67,8 +67,8 @@
* If a widget has native scrolling abilities, it can be added to the
* #GtkScrolledWindow with gtk_container_add(). If a widget does not, you
* must first add the widget to a #GtkViewport, then add the #GtkViewport
- * to the scrolled window. The convenience function
- * gtk_scrolled_window_add_with_viewport() does exactly this, so you can
+ * to the scrolled window. gtk_container_add() will do this for you for
+ * widgets that don't implement #GtkScrollable natively, so you can
* ignore the presence of the viewport.
*
* The position of the scrollbars is controlled by the scroll
@@ -3032,7 +3032,7 @@ gtk_scrolled_window_add (GtkContainer *container,
GtkScrolledWindowPrivate *priv;
GtkScrolledWindow *scrolled_window;
GtkBin *bin;
- GtkWidget *child_widget;
+ GtkWidget *child_widget, *scrollable_child;
GtkAdjustment *hadj, *vadj;
bin = GTK_BIN (container);
@@ -3042,20 +3042,27 @@ gtk_scrolled_window_add (GtkContainer *container,
scrolled_window = GTK_SCROLLED_WINDOW (container);
priv = scrolled_window->priv;
+ if (GTK_IS_SCROLLABLE (child))
+ {
+ scrollable_child = child;
+ }
+ else
+ {
+ scrollable_child = gtk_viewport_new (NULL, NULL);
+ gtk_widget_show (scrollable_child);
+ gtk_container_add (GTK_CONTAINER (scrollable_child), child);
+ }
+
if (gtk_widget_get_realized (GTK_WIDGET (bin)))
- gtk_widget_set_parent_window (child, priv->overshoot_window);
+ gtk_widget_set_parent_window (scrollable_child, priv->overshoot_window);
- _gtk_bin_set_child (bin, child);
- gtk_widget_set_parent (child, GTK_WIDGET (bin));
+ _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));
- if (GTK_IS_SCROLLABLE (child))
- g_object_set (child, "hadjustment", hadj, "vadjustment", vadj, NULL);
- else
- g_warning ("gtk_scrolled_window_add(): cannot add non scrollable widget "
- "use gtk_scrolled_window_add_with_viewport() instead");
+ g_object_set (scrollable_child, "hadjustment", hadj, "vadjustment", vadj, NULL);
}
static void