window: Unrealize renderer before children
authorMatthias Clasen <mclasen@redhat.com>
Tue, 22 Oct 2019 23:52:14 +0000 (19:52 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Wed, 23 Oct 2019 00:28:28 +0000 (20:28 -0400)
Unrealize the GSK renderer before destroying children.
This makes the renderer drop any texture caches that
it might have, so that we don't needlessly download
them when releasing the widget-side holder objects.

As a fortunate side effect, this fixes crashes on
exit with GtkGLArea-containing windows under Wayland.

gtk/gtkwindow.c

index c93b733f61bd45d78a9a5483f216dd83d8a452d2..4891a36167251bc1804bb484017ba69b42330eee 100644 (file)
@@ -5687,6 +5687,8 @@ gtk_window_unrealize (GtkWidget *widget)
       info->last.flags = 0;
     }
 
+  gsk_renderer_unrealize (priv->renderer);
+
   if (priv->popup_menu)
     {
       gtk_widget_destroy (priv->popup_menu);
@@ -5700,7 +5702,6 @@ gtk_window_unrealize (GtkWidget *widget)
                         (GtkCallback) gtk_widget_unrealize,
                         NULL);
 
-  gsk_renderer_unrealize (priv->renderer);
   g_clear_object (&priv->renderer);
 
   surface = priv->surface;