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
This commit is contained in:
parent
5f41eb74a5
commit
9efa28591c
@ -67,8 +67,8 @@
|
|||||||
* If a widget has native scrolling abilities, it can be added to the
|
* If a widget has native scrolling abilities, it can be added to the
|
||||||
* #GtkScrolledWindow with gtk_container_add(). If a widget does not, you
|
* #GtkScrolledWindow with gtk_container_add(). If a widget does not, you
|
||||||
* must first add the widget to a #GtkViewport, then add the #GtkViewport
|
* must first add the widget to a #GtkViewport, then add the #GtkViewport
|
||||||
* to the scrolled window. The convenience function
|
* to the scrolled window. gtk_container_add() will do this for you for
|
||||||
* gtk_scrolled_window_add_with_viewport() does exactly this, so you can
|
* widgets that don't implement #GtkScrollable natively, so you can
|
||||||
* ignore the presence of the viewport.
|
* ignore the presence of the viewport.
|
||||||
*
|
*
|
||||||
* The position of the scrollbars is controlled by the scroll
|
* The position of the scrollbars is controlled by the scroll
|
||||||
@ -3032,7 +3032,7 @@ gtk_scrolled_window_add (GtkContainer *container,
|
|||||||
GtkScrolledWindowPrivate *priv;
|
GtkScrolledWindowPrivate *priv;
|
||||||
GtkScrolledWindow *scrolled_window;
|
GtkScrolledWindow *scrolled_window;
|
||||||
GtkBin *bin;
|
GtkBin *bin;
|
||||||
GtkWidget *child_widget;
|
GtkWidget *child_widget, *scrollable_child;
|
||||||
GtkAdjustment *hadj, *vadj;
|
GtkAdjustment *hadj, *vadj;
|
||||||
|
|
||||||
bin = GTK_BIN (container);
|
bin = GTK_BIN (container);
|
||||||
@ -3042,20 +3042,27 @@ gtk_scrolled_window_add (GtkContainer *container,
|
|||||||
scrolled_window = GTK_SCROLLED_WINDOW (container);
|
scrolled_window = GTK_SCROLLED_WINDOW (container);
|
||||||
priv = scrolled_window->priv;
|
priv = scrolled_window->priv;
|
||||||
|
|
||||||
if (gtk_widget_get_realized (GTK_WIDGET (bin)))
|
if (GTK_IS_SCROLLABLE (child))
|
||||||
gtk_widget_set_parent_window (child, priv->overshoot_window);
|
{
|
||||||
|
scrollable_child = child;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
scrollable_child = gtk_viewport_new (NULL, NULL);
|
||||||
|
gtk_widget_show (scrollable_child);
|
||||||
|
gtk_container_add (GTK_CONTAINER (scrollable_child), child);
|
||||||
|
}
|
||||||
|
|
||||||
_gtk_bin_set_child (bin, child);
|
if (gtk_widget_get_realized (GTK_WIDGET (bin)))
|
||||||
gtk_widget_set_parent (child, GTK_WIDGET (bin));
|
gtk_widget_set_parent_window (scrollable_child, priv->overshoot_window);
|
||||||
|
|
||||||
|
_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));
|
hadj = gtk_range_get_adjustment (GTK_RANGE (priv->hscrollbar));
|
||||||
vadj = gtk_range_get_adjustment (GTK_RANGE (priv->vscrollbar));
|
vadj = gtk_range_get_adjustment (GTK_RANGE (priv->vscrollbar));
|
||||||
|
|
||||||
if (GTK_IS_SCROLLABLE (child))
|
g_object_set (scrollable_child, "hadjustment", hadj, "vadjustment", vadj, NULL);
|
||||||
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");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -49,8 +49,9 @@
|
|||||||
* #GtkTreeView or #GtkIconView, it can be added to a #GtkScrolledWindow
|
* #GtkTreeView or #GtkIconView, it can be added to a #GtkScrolledWindow
|
||||||
* with gtk_container_add(). If a widget does not, you must first add the
|
* with gtk_container_add(). If a widget does not, you must first add the
|
||||||
* widget to a #GtkViewport, then add the viewport to the scrolled window.
|
* widget to a #GtkViewport, then add the viewport to the scrolled window.
|
||||||
* The convenience function gtk_scrolled_window_add_with_viewport() does
|
* gtk_container_add() does this automatically if a child that does not
|
||||||
* exactly this, so you can ignore the presence of the viewport.
|
* implement #GtkScrollable is added to a #GtkScrolledWindow, so you can
|
||||||
|
* ignore the presence of the viewport.
|
||||||
*
|
*
|
||||||
* The #GtkViewport will start scrolling content only if allocated less
|
* The #GtkViewport will start scrolling content only if allocated less
|
||||||
* than the child widget's minimum size in a given orientation.
|
* than the child widget's minimum size in a given orientation.
|
||||||
|
Loading…
Reference in New Issue
Block a user