surface: Use correct display when destroying a surface for depth switch
authorSebastian Keller <skeller@gnome.org>
Tue, 22 Mar 2022 07:11:18 +0000 (08:11 +0100)
committerMatthias Clasen <mclasen@redhat.com>
Thu, 21 Apr 2022 23:14:32 +0000 (19:14 -0400)
When surface depth switches from non-high-depth to high-depth (or vice
versa) the current surface has to be destroyed before a new one can be
created for this window. eglDestroySurface however was getting passed a
GdkDisplay, rather than the EGLDisplay it expects. As a result the old
surface did not get destroyed and the new surface could not be created
causing rendering to freeze.

Fixes: https://gitlab.gnome.org/GNOME/gtk/-/issues/4773
gdk/gdksurface.c

index ddfa767a9911e4d731aa650d904d63108d431a65..16d668a931091fb6b521935fe183f5185003380e 100644 (file)
@@ -1125,7 +1125,7 @@ gdk_surface_ensure_egl_surface (GdkSurface *self,
       gdk_display_get_egl_config_high_depth (display) != gdk_display_get_egl_config (display))
     {
       gdk_gl_context_clear_current_if_surface (self);
-      eglDestroySurface (gdk_surface_get_display (self), priv->egl_surface);
+      eglDestroySurface (gdk_display_get_egl_display (display), priv->egl_surface);
       priv->egl_surface = NULL;
     }