widget: Skip popovers in allocation
authorMatthias Clasen <mclasen@redhat.com>
Wed, 8 Mar 2023 18:36:42 +0000 (13:36 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Wed, 8 Mar 2023 18:40:51 +0000 (13:40 -0500)
Native widgets get allocated via their surface,
so can skip them here. This avoids criticals when
re-mapping a popover for the second time, as can
be seen e.g. in the 'Selections' demo in gtk4-demo.

gtk/gtkwidget.c

index 45fd23fb9c8a9e8b07f576d819f8a0b3040e5a2a..702f9a72c16dc4b25bd1499da8d6c00052f7883d 100644 (file)
@@ -3889,7 +3889,8 @@ gtk_widget_ensure_allocate_on_children (GtkWidget *widget)
        child != NULL;
        child = _gtk_widget_get_next_sibling (child))
     {
-      gtk_widget_ensure_allocate (child);
+      if (gtk_widget_should_layout (child))
+        gtk_widget_ensure_allocate (child);
     }
 }