diff options
author | Sven Gothel <[email protected]> | 2010-11-17 13:10:34 +0100 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2010-11-17 13:10:34 +0100 |
commit | 64aa219406c1aa1d6022fedce7a52c8c19d0e35d (patch) | |
tree | d608bc3c2e22aa9109e69c2887a5f5dc848c7f57 | |
parent | 4447e29dfb304a6547295a363cf9de3572c768ea (diff) |
NEWT X11Display: ignore null Display handle at dispatch
-rw-r--r-- | src/junit/com/jogamp/test/junit/newt/TestCloseNewtAWT.java | 43 | ||||
-rw-r--r-- | src/newt/classes/com/jogamp/newt/impl/x11/X11Display.java | 6 |
2 files changed, 36 insertions, 13 deletions
diff --git a/src/junit/com/jogamp/test/junit/newt/TestCloseNewtAWT.java b/src/junit/com/jogamp/test/junit/newt/TestCloseNewtAWT.java index 4aa028308..1899a6b81 100644 --- a/src/junit/com/jogamp/test/junit/newt/TestCloseNewtAWT.java +++ b/src/junit/com/jogamp/test/junit/newt/TestCloseNewtAWT.java @@ -30,16 +30,20 @@ package com.jogamp.test.junit.newt; import org.junit.Test; +import java.lang.reflect.InvocationTargetException; +import java.awt.EventQueue; +import java.awt.Toolkit; import javax.swing.JFrame; import javax.swing.SwingUtilities; -import java.awt.EventQueue; -import java.lang.reflect.InvocationTargetException; +import javax.media.nativewindow.NativeWindow; import javax.media.nativewindow.util.Point; import javax.media.opengl.GLCapabilities; import javax.media.opengl.GLProfile; import com.jogamp.newt.Window; import com.jogamp.newt.awt.NewtCanvasAWT; +import com.jogamp.newt.event.WindowAdapter; +import com.jogamp.newt.event.WindowEvent; import com.jogamp.newt.opengl.GLWindow; import com.jogamp.test.junit.util.UITestCase; @@ -71,8 +75,13 @@ public class TestCloseNewtAWT extends UITestCase { ", holds AWTTreeLock: "+Thread.holdsLock(MyCanvas.this.getTreeLock())); // Critical: Within NEWT EDT, while AWT is locked - Point p = MyCanvas.this.getNativeWindow().getLocationOnScreen(null); - System.err.println("MyCanvas On NEWT-EDT: position: "+p); + NativeWindow nw = MyCanvas.this.getNativeWindow(); + if(null != nw) { + Point p = nw.getLocationOnScreen(null); + System.err.println("MyCanvas On NEWT-EDT: position: "+p); + } else { + System.err.println("MyCanvas On NEWT-EDT: position n/a, null NativeWindow"); + } } }); System.err.println("MyCanvas passed critical: "+Thread.currentThread()+", holds AWTTreeLock: "+Thread.holdsLock(this.getTreeLock())); @@ -83,14 +92,29 @@ public class TestCloseNewtAWT extends UITestCase { } } + class NEWTWindowClosingAdapter extends WindowAdapter { + public void windowDestroyNotify(WindowEvent e) { + System.err.println("Destroy NEWT: windowDestroyNotify "+Thread.currentThread() + ", "+ e); + } + } + + class AWTClosingWindowAdapter extends java.awt.event.WindowAdapter { + public void windowClosing(WindowEvent ev) { + System.err.println("Destroy AWT: windowClosing "+Thread.currentThread() + ", "+ ev); + } + } + + @Test public void testCloseNewtAWT() throws InterruptedException, InvocationTargetException { newtWindow = GLWindow.create(new GLCapabilities(GLProfile.getDefault())); + newtWindow.addWindowListener(new NEWTWindowClosingAdapter()); newtCanvas = new MyCanvas(newtWindow); SwingUtilities.invokeLater(new Runnable() { public void run() { frame = new JFrame("NEWT Close Test"); + frame.addWindowListener(new AWTClosingWindowAdapter()); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); frame.getContentPane().add(newtCanvas); frame.pack(); @@ -100,12 +124,11 @@ public class TestCloseNewtAWT extends UITestCase { }); Thread.sleep(1000); - // programatically close window - EventQueue.invokeAndWait(new Runnable() { - public void run() { - frame.dispose(); - } - }); + // programatically issue windowClosing + Toolkit tk = Toolkit.getDefaultToolkit(); + EventQueue evtQ = tk.getSystemEventQueue(); + evtQ.postEvent(new java.awt.event.WindowEvent(frame, java.awt.event.WindowEvent.WINDOW_CLOSING)); + Thread.sleep(200); GLProfile.shutdown(); } diff --git a/src/newt/classes/com/jogamp/newt/impl/x11/X11Display.java b/src/newt/classes/com/jogamp/newt/impl/x11/X11Display.java index ab1e271a4..1aaffacb5 100644 --- a/src/newt/classes/com/jogamp/newt/impl/x11/X11Display.java +++ b/src/newt/classes/com/jogamp/newt/impl/x11/X11Display.java @@ -86,10 +86,10 @@ public class X11Display extends DisplayImpl { } protected void dispatchMessagesNative() { - if(0==getHandle()) { - throw new RuntimeException("display handle null"); + long dpy = getHandle(); + if(0!=dpy) { + DispatchMessages0(dpy, javaObjectAtom, windowDeleteAtom); } - DispatchMessages0(getHandle(), javaObjectAtom, windowDeleteAtom); } protected long getJavaObjectAtom() { return javaObjectAtom; } |