summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2010-11-17 13:10:34 +0100
committerSven Gothel <[email protected]>2010-11-17 13:10:34 +0100
commit64aa219406c1aa1d6022fedce7a52c8c19d0e35d (patch)
treed608bc3c2e22aa9109e69c2887a5f5dc848c7f57
parent4447e29dfb304a6547295a363cf9de3572c768ea (diff)
NEWT X11Display: ignore null Display handle at dispatch
-rw-r--r--src/junit/com/jogamp/test/junit/newt/TestCloseNewtAWT.java43
-rw-r--r--src/newt/classes/com/jogamp/newt/impl/x11/X11Display.java6
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; }