sizerequest: Add a critical when for_size is too small
authorBenjamin Otte <otte@redhat.com>
Fri, 19 Nov 2021 20:58:09 +0000 (21:58 +0100)
committerBenjamin Otte <otte@redhat.com>
Fri, 19 Nov 2021 22:46:59 +0000 (23:46 +0100)
It's not expensive to check it because we'll cache the dfault size
request anyway, and people do it wrong a lot.
As a bonus, don't do any return_if_fail(), just use the min size
instead.

gtk/gtksizerequest.c

index a0f066b997d436d316a54b35b87de9d11b41c7f2..199bce257550aea8e26c6fe136fd442e40c86788 100644 (file)
@@ -488,6 +488,18 @@ gtk_widget_measure (GtkWidget        *widget,
   g_return_if_fail (orientation == GTK_ORIENTATION_HORIZONTAL ||
                     orientation == GTK_ORIENTATION_VERTICAL);
 
+  if (for_size >= 0)
+    {
+      int min_opposite_size;
+      gtk_widget_measure (widget, OPPOSITE_ORIENTATION (orientation), -1, &min_opposite_size, NULL, NULL, NULL);
+      if (for_size < min_opposite_size)
+        {
+          g_critical ("gtk_widget_measure: assertion 'for_size >= minimum opposite size' failed for %s %p: %u >= %u",
+                      G_OBJECT_TYPE_NAME (widget), widget, for_size, min_opposite_size);
+          for_size = min_opposite_size;
+        }
+    }
+
   /* This is the main function that checks for a cached size and
    * possibly queries the widget class to compute the size if it's
    * not cached.