widget: Simplify size allocation
authorMatthias Clasen <mclasen@redhat.com>
Wed, 8 Mar 2023 18:06:53 +0000 (13:06 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Wed, 8 Mar 2023 18:39:54 +0000 (13:39 -0500)
Don't call ensure_allocate if we've just
done size_allocate. This makes criticals
from reshowing popovers go away.

gtk/gtkwidget.c

index fd242a88ebd37eb3706019c4cf42a92ce4017842..274b507b7cc2776d1ca739b84dda8be599ecde20 100644 (file)
@@ -4037,7 +4037,10 @@ gtk_widget_allocate (GtkWidget    *widget,
   size_changed = (priv->width != adjusted.width) || (priv->height != adjusted.height);
 
   if (!alloc_needed && !size_changed && !baseline_changed)
-    goto skip_allocate;
+    {
+      gtk_widget_ensure_allocate (widget);
+      goto skip_allocate;
+    }
 
   priv->width = adjusted.width;
   priv->height = adjusted.height;
@@ -4085,9 +4088,6 @@ skip_allocate:
     gtk_widget_queue_draw (priv->parent);
 
 out:
-  if (priv->alloc_needed_on_child)
-    gtk_widget_ensure_allocate (widget);
-
   gtk_widget_pop_verify_invariants (widget);
 }