diff --git a/src/java/org/lwjgl/opengl/MacOSXCanvasListener.java b/src/java/org/lwjgl/opengl/MacOSXCanvasListener.java index 85de491d..4b4115d3 100644 --- a/src/java/org/lwjgl/opengl/MacOSXCanvasListener.java +++ b/src/java/org/lwjgl/opengl/MacOSXCanvasListener.java @@ -53,18 +53,19 @@ final class MacOSXCanvasListener implements ComponentListener, HierarchyListener public MacOSXCanvasListener(Canvas canvas) { this.canvas = canvas; -// ((MacOSXDisplay)Display.getImplementation()).setView(this); - } - - public void enableListeners() { canvas.addComponentListener(this); canvas.addHierarchyListener(this); setUpdate(); } public void disableListeners() { - canvas.removeComponentListener(this); - canvas.removeHierarchyListener(this); + // Mac OS X applets will hang in Display.destroy() when parented when removing the listeners directly + java.awt.EventQueue.invokeLater(new Runnable() { + public final void run() { + canvas.removeComponentListener(MacOSXCanvasListener.this); + canvas.removeHierarchyListener(MacOSXCanvasListener.this); + } + }); } public boolean syncShouldUpdateContext() { diff --git a/src/java/org/lwjgl/opengl/MacOSXDisplay.java b/src/java/org/lwjgl/opengl/MacOSXDisplay.java index 0c37d26e..f7856750 100644 --- a/src/java/org/lwjgl/opengl/MacOSXDisplay.java +++ b/src/java/org/lwjgl/opengl/MacOSXDisplay.java @@ -107,7 +107,6 @@ final class MacOSXDisplay implements DisplayImplementation { canvas = parent; } canvas_listener = new MacOSXCanvasListener(canvas); - canvas_listener.enableListeners(); robot = AWTUtil.createRobot(canvas); } catch (LWJGLException e) { destroyWindow();