diff --git a/gtk/gtkscrollable.c b/gtk/gtkscrollable.c
index 0ff0d9612c..7dbaa824d0 100644
--- a/gtk/gtkscrollable.c
+++ b/gtk/gtkscrollable.c
@@ -45,6 +45,14 @@
*
*
*
+ * Because its preferred size is the size for a fully expanded widget,
+ * the scrollable widget must be able to cope with underallocations.
+ * This means that it must accept any value passed to its
+ * #GtkWidgetClass.size_allocate() function.
+ *
+ *
+ *
+ *
* When the parent allocates space to the scrollable child widget, the widget should update
* the adjustments' properties with new values.
*
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index 86e59d3df8..f7094ba9f3 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -4816,7 +4816,8 @@ gtk_widget_size_allocate (GtkWidget *widget,
gtk_widget_get_preferred_width_for_height (widget, real_allocation.height, &min_width, &natural_width);
}
- if (min_width > real_allocation.width || min_height > real_allocation.height)
+ if ((min_width > real_allocation.width || min_height > real_allocation.height) &&
+ !GTK_IS_SCROLLABLE (widget))
g_warning ("gtk_widget_size_allocate(): attempt to underallocate %s%s %s %p. "
"Allocation is %dx%d, but minimum required size is %dx%d.",
priv->parent ? G_OBJECT_TYPE_NAME (priv->parent) : "", priv->parent ? "'s child" : "toplevel",