diff --git a/modules/juce_opengl/native/juce_OpenGL_linux_X11.h b/modules/juce_opengl/native/juce_OpenGL_linux_X11.h index ef7eb852ed..1219041323 100644 --- a/modules/juce_opengl/native/juce_OpenGL_linux_X11.h +++ b/modules/juce_opengl/native/juce_OpenGL_linux_X11.h @@ -97,7 +97,7 @@ public: XSetWindowAttributes swa; swa.colormap = colourMap; swa.border_pixel = 0; - swa.event_mask = ExposureMask | StructureNotifyMask; + swa.event_mask = embeddedWindowEventMask; auto glBounds = component.getTopLevelComponent() ->getLocalArea (&component, component.getLocalBounds()); @@ -133,9 +133,18 @@ public: if (embeddedWindow != 0) { XWindowSystemUtilities::ScopedXLock xLock; + X11Symbols::getInstance()->xUnmapWindow (display, embeddedWindow); X11Symbols::getInstance()->xDestroyWindow (display, embeddedWindow); X11Symbols::getInstance()->xSync (display, False); + + XEvent event; + while (X11Symbols::getInstance()->xCheckWindowEvent (display, + embeddedWindow, + embeddedWindowEventMask, + &event) == True) + { + } } } @@ -233,6 +242,8 @@ public: struct Locker { Locker (NativeContext&) {} }; private: + static constexpr int embeddedWindowEventMask = ExposureMask | StructureNotifyMask; + Component& component; GLXContext renderContext = {}; Window embeddedWindow = {};