From b6c41e57e2b4c81d82fe14a57cd8a9c2f2ac0c6a Mon Sep 17 00:00:00 2001 From: Andrea Azzarone Date: Wed, 25 Oct 2017 09:37:36 -0400 Subject: [PATCH] gdk: Clear GL context when window is withdrawn Some clients (e.g. gnome-online-accounts) quickly unmap and map a window. With some backends the backend surface will be replaced causing the application to crash because the GL context is still using the old surface. Clearing the GL context when a window is withdrawn fixes this. https://bugzilla.gnome.org/show_bug.cgi?id=789141 --- gdk/gdkwindow.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c index 7e1a079333..08445870e8 100644 --- a/gdk/gdkwindow.c +++ b/gdk/gdkwindow.c @@ -3903,6 +3903,7 @@ gdk_window_withdraw (GdkWindow *window) { GdkWindowImplClass *impl_class; gboolean was_mapped; + GdkGLContext *current_context; g_return_if_fail (GDK_IS_WINDOW (window)); @@ -3925,6 +3926,10 @@ gdk_window_withdraw (GdkWindow *window) _gdk_make_event (window, GDK_UNMAP, NULL, FALSE); } + current_context = gdk_gl_context_get_current (); + if (current_context != NULL && gdk_gl_context_get_window (current_context) == window) + gdk_gl_context_clear_current (); + recompute_visible_regions (window, FALSE); gdk_window_clear_old_updated_area (window); }