From a95ec7bc8fa4cff3d0cc9df671354bf7ee150f83 Mon Sep 17 00:00:00 2001 From: ed Date: Mon, 6 Jul 2020 11:18:55 +0100 Subject: [PATCH] Linux: Check parent window is still valid before unmapping/destroying embedded OpenGL window --- .../juce_opengl/native/juce_OpenGL_linux_X11.h | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/modules/juce_opengl/native/juce_OpenGL_linux_X11.h b/modules/juce_opengl/native/juce_OpenGL_linux_X11.h index cd23678807..c33018466e 100644 --- a/modules/juce_opengl/native/juce_OpenGL_linux_X11.h +++ b/modules/juce_opengl/native/juce_OpenGL_linux_X11.h @@ -126,13 +126,17 @@ public: ~NativeContext() { - juce_LinuxRemoveRepaintListener (component.getPeer(), &dummy); - - if (embeddedWindow != 0) + if (auto* peer = component.getPeer()) { - XWindowSystemUtilities::ScopedXLock xLock; - X11Symbols::getInstance()->xUnmapWindow (display, embeddedWindow); - X11Symbols::getInstance()->xDestroyWindow (display, embeddedWindow); + juce_LinuxRemoveRepaintListener (peer, &dummy); + + if (embeddedWindow != 0) + { + XWindowSystemUtilities::ScopedXLock xLock; + X11Symbols::getInstance()->xUnmapWindow (display, embeddedWindow); + X11Symbols::getInstance()->xDestroyWindow (display, embeddedWindow); + X11Symbols::getInstance()->xSync (display, True); + } } if (bestVisual != nullptr) @@ -233,7 +237,7 @@ private: GLXContext renderContext = {}; Window embeddedWindow = {}; - int swapFrames = 0; + int swapFrames = 1; Rectangle bounds; XVisualInfo* bestVisual = nullptr; void* contextToShareWith;