popover: use GtkNative opaque region API
authorChristian Hergert <chergert@redhat.com>
Fri, 11 Feb 2022 00:54:32 +0000 (16:54 -0800)
committerChristian Hergert <chergert@redhat.com>
Fri, 11 Feb 2022 22:37:46 +0000 (14:37 -0800)
This updates GtkPopover to use the new GtkNative abstraction for
reporting opaque regions of the window, in hopes that it can speed
up compositors for things like animated lists, menu transitions,
and more.

Fixes #4689

gtk/gtkpopover.c

index 3c16e8931214973ecbf324184e90f987fe98ec65..2f4a33493e40afbcf4edb558394fa3a415e9522d 100644 (file)
@@ -957,6 +957,8 @@ gtk_popover_realize (GtkWidget *widget)
   priv->renderer = gsk_renderer_new_for_surface (priv->surface);
 
   gtk_native_realize (GTK_NATIVE (popover));
+
+  gtk_native_update_opaque_region (GTK_NATIVE (popover), priv->contents_widget, TRUE, TRUE, 0);
 }
 
 static void
@@ -1392,6 +1394,9 @@ gtk_popover_update_shape (GtkPopover *popover)
       gdk_surface_set_input_region (priv->surface, region);
       cairo_region_destroy (region);
     }
+
+  if (_gtk_widget_get_realized (GTK_WIDGET (popover)))
+    gtk_native_update_opaque_region (GTK_NATIVE (popover), priv->contents_widget, TRUE, TRUE, 0);
 }
 
 static int