aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2011-11-10 01:21:50 +0100
committerSven Gothel <[email protected]>2011-11-10 01:21:50 +0100
commitd1ac91ae3e8fab5176cb677a20fd764f04a00cc8 (patch)
tree22d22d3c0c1acbfbfa9e7e853a99390e468cfb21 /src
parent44b86776d35668c12ccc698b92ae955bde8f250a (diff)
Fix regression JAWTWindow/AWTGraphicsConfiguration updateGraphicsConfiguration() of commit 46542168d64b37f544f61802693f15b59b224e4e
While introducing NewtCanvasAWT's lifetime reference of (JAWTWindow) nativeWindow using updateGraphicsConfiguration() to determine the actual config values at addNotify(), it was overseen that the AWTGraphicsDevice needs to be re-validated. JAWTWindow's validateNative() ensures that the AWTGraphicsDevice reflects the platform native handle where required (X11).
Diffstat (limited to 'src')
-rw-r--r--src/nativewindow/classes/jogamp/nativewindow/jawt/JAWTWindow.java11
-rw-r--r--src/newt/classes/jogamp/newt/awt/event/NewtFactoryAWT.java11
2 files changed, 21 insertions, 1 deletions
diff --git a/src/nativewindow/classes/jogamp/nativewindow/jawt/JAWTWindow.java b/src/nativewindow/classes/jogamp/nativewindow/jawt/JAWTWindow.java
index c8ce13b40..41f79c98f 100644
--- a/src/nativewindow/classes/jogamp/nativewindow/jawt/JAWTWindow.java
+++ b/src/nativewindow/classes/jogamp/nativewindow/jawt/JAWTWindow.java
@@ -102,6 +102,16 @@ public abstract class JAWTWindow implements NativeWindow {
}
validateNative();
}
+
+ /**
+ * Implementors shall ensure that all native handles are valid, eg. the {@link javax.media.nativewindow.awt.AWTGraphicsDevice AWTGraphicsDevice}'s
+ * subtype via {@link javax.media.nativewindow.awt.AWTGraphicsDevice#setSubType(String, long) awtGraphicsDevice.setSubType(NativeWindowFactory.TYPE_X11, displayHandle)}.
+ * <p>
+ * This method may be called several times,
+ * hence the implementation shall check for valid values 1st and bail out early if satisfied.
+ * </p>
+ * @throws NativeWindowException
+ */
protected abstract void validateNative() throws NativeWindowException;
protected synchronized void invalidate() {
@@ -164,6 +174,7 @@ public abstract class JAWTWindow implements NativeWindow {
protected abstract int lockSurfaceImpl() throws NativeWindowException;
public final int lockSurface() throws NativeWindowException {
+ validateNative();
surfaceLock.lock();
int res = surfaceLock.getHoldCount() == 1 ? LOCK_SURFACE_NOT_READY : LOCK_SUCCESS; // new lock ?
diff --git a/src/newt/classes/jogamp/newt/awt/event/NewtFactoryAWT.java b/src/newt/classes/jogamp/newt/awt/event/NewtFactoryAWT.java
index 1d11887fb..9b812d22a 100644
--- a/src/newt/classes/jogamp/newt/awt/event/NewtFactoryAWT.java
+++ b/src/newt/classes/jogamp/newt/awt/event/NewtFactoryAWT.java
@@ -76,10 +76,19 @@ public class NewtFactoryAWT extends NewtFactory {
if(! ( nw instanceof JAWTWindow ) ) {
throw new NativeWindowException("Not an AWT NativeWindow: "+nw);
}
+ if(DEBUG_IMPLEMENTATION) {
+ System.err.println("NewtFactoryAWT.updateGraphicsConfiguration: (pre) "+awtComp+" -> "+nw);
+ }
final AWTGraphicsConfiguration awtConfig = (AWTGraphicsConfiguration) nw.getGraphicsConfiguration();
awtConfig.updateGraphicsConfiguration(awtComp);
+ // lockSurface() re-issues JAWTWindow's native validation
+ if( NativeSurface.LOCK_SURFACE_NOT_READY >= nw.lockSurface() ) {
+ throw new NativeWindowException("could not lock "+nw);
+ }
+ nw.unlockSurface();
+
if(DEBUG_IMPLEMENTATION) {
- System.err.println("NewtFactoryAWT.updateGraphicsConfiguration: "+awtComp+" -> "+nw);
+ System.err.println("NewtFactoryAWT.updateGraphicsConfiguration: (post) "+awtComp+" -> "+nw);
}
}