diff --git a/src/modules/evas/engines/gl_x11/evas_x_main.c b/src/modules/evas/engines/gl_x11/evas_x_main.c index 4a0cf62ba2..31e120e3ce 100644 --- a/src/modules/evas/engines/gl_x11/evas_x_main.c +++ b/src/modules/evas/engines/gl_x11/evas_x_main.c @@ -447,9 +447,18 @@ eng_window_free(Outbuf *gw) context = EGL_NO_CONTEXT; } #else - if (gw->glxwin) glXDestroyWindow(gw->disp, gw->glxwin); + if (gw->glxwin) + { + glXMakeContextCurrent(gw->disp, 0, 0, gw->context); + glXDestroyWindow(gw->disp, gw->glxwin); + } if (ref == 0) { + if (!gw->glxwin) + { + if (glXGetCurrentContext() == gw->context) + glXMakeCurrent(gw->disp, 0, NULL); + } if (context) glXDestroyContext(gw->disp, context); if (rgba_context) glXDestroyContext(gw->disp, rgba_context); context = 0; @@ -457,6 +466,11 @@ eng_window_free(Outbuf *gw) fbconf = 0; rgba_fbconf = 0; } + else if (!gw->glxwin) + { + if (glXGetCurrentDrawable() == gw->win) + glXMakeCurrent(gw->disp, 0, gw->context); + } #endif free(gw); }