aboutsummaryrefslogtreecommitdiffstats
path: root/src/nativewindow
diff options
context:
space:
mode:
Diffstat (limited to 'src/nativewindow')
-rw-r--r--src/nativewindow/classes/javax/media/nativewindow/NativeWindowFactory.java46
-rw-r--r--src/nativewindow/classes/jogamp/nativewindow/NativeWindowFactoryImpl.java2
-rw-r--r--src/nativewindow/classes/jogamp/nativewindow/macosx/OSXUtil.java12
-rw-r--r--src/nativewindow/classes/jogamp/nativewindow/windows/GDIUtil.java15
-rw-r--r--src/nativewindow/classes/jogamp/nativewindow/x11/X11Util.java13
5 files changed, 30 insertions, 58 deletions
diff --git a/src/nativewindow/classes/javax/media/nativewindow/NativeWindowFactory.java b/src/nativewindow/classes/javax/media/nativewindow/NativeWindowFactory.java
index 6faa9890c..94f5d753c 100644
--- a/src/nativewindow/classes/javax/media/nativewindow/NativeWindowFactory.java
+++ b/src/nativewindow/classes/javax/media/nativewindow/NativeWindowFactory.java
@@ -99,7 +99,6 @@ public abstract class NativeWindowFactory {
private static Constructor<?> x11JAWTToolkitLockConstructor;
private static Class<?> x11ToolkitLockClass;
private static Constructor<?> x11ToolkitLockConstructor;
- private static boolean isFirstUIActionOnProcess;
private static boolean requiresToolkitLock;
/** Creates a new NativeWindowFactory instance. End users do not
@@ -138,9 +137,7 @@ public abstract class NativeWindowFactory {
static boolean initialized = false;
- private static void initSingletonNativeImpl(final boolean firstUIActionOnProcess, final ClassLoader cl) {
- isFirstUIActionOnProcess = firstUIActionOnProcess;
-
+ private static void initSingletonNativeImpl(final ClassLoader cl) {
final String clazzName;
if( TYPE_X11.equals(nativeWindowingTypePure) ) {
clazzName = X11UtilClassName;
@@ -152,9 +149,7 @@ public abstract class NativeWindowFactory {
clazzName = null;
}
if( null != clazzName ) {
- ReflectionUtil.callStaticMethod(clazzName, "initSingleton",
- new Class[] { boolean.class },
- new Object[] { new Boolean(firstUIActionOnProcess) }, cl );
+ ReflectionUtil.callStaticMethod(clazzName, "initSingleton", null, null, cl );
final Boolean res = (Boolean) ReflectionUtil.callStaticMethod(clazzName, "requiresToolkitLock", null, null, cl);
requiresToolkitLock = res.booleanValue();
@@ -166,24 +161,13 @@ public abstract class NativeWindowFactory {
/**
* Static one time initialization of this factory.<br>
* This initialization method <b>must be called</b> once by the program or utilizing modules!
- * <p>
- * The parameter <code>firstUIActionOnProcess</code> has an impact on concurrent locking:
- * <ul>
- * <li> {@link #getDefaultToolkitLock() getDefaultToolkitLock() }</li>
- * <li> {@link #getDefaultToolkitLock(java.lang.String) getDefaultToolkitLock(type) }</li>
- * <li> {@link #createDefaultToolkitLock(java.lang.String, long) createDefaultToolkitLock(type, dpyHandle) }</li>
- * <li> {@link #createDefaultToolkitLockNoAWT(java.lang.String, long) createDefaultToolkitLockNoAWT(type, dpyHandle) }</li>
- * </ul>
- * </p>
- * @param firstUIActionOnProcess Should be <code>true</code> if called before the first UI action of the running program,
- * otherwise <code>false</code>.
*/
- public static synchronized void initSingleton(final boolean firstUIActionOnProcess) {
+ public static synchronized void initSingleton() {
if(!initialized) {
initialized = true;
if(DEBUG) {
- System.err.println(Thread.currentThread().getName()+" - NativeWindowFactory.initSingleton("+firstUIActionOnProcess+")");
+ System.err.println(Thread.currentThread().getName()+" - NativeWindowFactory.initSingleton()");
}
final ClassLoader cl = NativeWindowFactory.class.getClassLoader();
@@ -197,10 +181,6 @@ public abstract class NativeWindowFactory {
nativeWindowingTypeCustom = tmp;
}
- if(firstUIActionOnProcess) {
- // X11 initialization before possible AWT initialization
- initSingletonNativeImpl(true, cl);
- }
isAWTAvailable = false; // may be set to true below
if( Platform.AWT_AVAILABLE &&
@@ -248,10 +228,13 @@ public abstract class NativeWindowFactory {
}
}
}
- if(!firstUIActionOnProcess) {
- // X11 initialization after possible AWT initialization
- initSingletonNativeImpl(false, cl);
- }
+
+ // X11 initialization after possible AWT initialization
+ // This is performed post AWT initialization, allowing AWT to complete the same,
+ // which may have been triggered before NativeWindow initialization.
+ // This way behavior is more uniforms across configurations (Applet/RCP, applications, ..).
+ initSingletonNativeImpl(cl);
+
registeredFactories = Collections.synchronizedMap(new HashMap<Class<?>, NativeWindowFactory>());
// register our default factory -> NativeWindow
@@ -276,7 +259,6 @@ public abstract class NativeWindowFactory {
}
if(DEBUG) {
- System.err.println("NativeWindowFactory firstUIActionOnProcess "+firstUIActionOnProcess);
System.err.println("NativeWindowFactory requiresToolkitLock "+requiresToolkitLock);
System.err.println("NativeWindowFactory isAWTAvailable "+isAWTAvailable+", defaultFactory "+factory);
}
@@ -301,12 +283,6 @@ public abstract class NativeWindowFactory {
}
}
- /** @return true if initialized with <b>{@link #initSingleton(boolean) initSingleton(firstUIActionOnProcess==true)}</b>,
- otherwise false. */
- public static boolean isFirstUIActionOnProcess() {
- return isFirstUIActionOnProcess;
- }
-
/** @return true if the underlying toolkit requires locking, otherwise false. */
public static boolean requiresToolkitLock() {
return requiresToolkitLock;
diff --git a/src/nativewindow/classes/jogamp/nativewindow/NativeWindowFactoryImpl.java b/src/nativewindow/classes/jogamp/nativewindow/NativeWindowFactoryImpl.java
index 9e18439db..2c2a627a4 100644
--- a/src/nativewindow/classes/jogamp/nativewindow/NativeWindowFactoryImpl.java
+++ b/src/nativewindow/classes/jogamp/nativewindow/NativeWindowFactoryImpl.java
@@ -90,7 +90,7 @@ public class NativeWindowFactoryImpl extends NativeWindowFactory {
// Assume Linux, Solaris, etc. Should probably test for these explicitly.
windowClassName = "jogamp.nativewindow.jawt.x11.X11JAWTWindow";
} else {
- throw new IllegalArgumentException("OS " + Platform.getOSName() + " not yet supported");
+ throw new IllegalArgumentException("Native windowing type " + windowingType + " (custom) not yet supported, platform reported native windowing type: "+getNativeWindowType(false));
}
nativeWindowConstructor = ReflectionUtil.getConstructor(
diff --git a/src/nativewindow/classes/jogamp/nativewindow/macosx/OSXUtil.java b/src/nativewindow/classes/jogamp/nativewindow/macosx/OSXUtil.java
index 894084fce..f5f735051 100644
--- a/src/nativewindow/classes/jogamp/nativewindow/macosx/OSXUtil.java
+++ b/src/nativewindow/classes/jogamp/nativewindow/macosx/OSXUtil.java
@@ -38,20 +38,18 @@ public class OSXUtil {
private static boolean isInit = false;
private static final boolean DEBUG = Debug.debug("OSXUtil");
- public static synchronized void initSingleton(boolean firstX11ActionOnProcess) {
+ public static synchronized void initSingleton() {
if(!isInit) {
+ if(DEBUG) {
+ System.out.println("OSXUtil.initSingleton()");
+ }
if(!NWJNILibLoader.loadNativeWindow("macosx")) {
throw new NativeWindowException("NativeWindow MacOSX native library load error.");
}
if( !initIDs0() ) {
throw new NativeWindowException("MacOSX: Could not initialized native stub");
- }
-
- if(DEBUG) {
- System.out.println("OSX.isFirstX11ActionOnProcess: "+firstX11ActionOnProcess);
- }
-
+ }
isInit = true;
}
}
diff --git a/src/nativewindow/classes/jogamp/nativewindow/windows/GDIUtil.java b/src/nativewindow/classes/jogamp/nativewindow/windows/GDIUtil.java
index d17a1898c..fda1649b6 100644
--- a/src/nativewindow/classes/jogamp/nativewindow/windows/GDIUtil.java
+++ b/src/nativewindow/classes/jogamp/nativewindow/windows/GDIUtil.java
@@ -41,24 +41,21 @@ public class GDIUtil {
private static RegisteredClassFactory dummyWindowClassFactory;
private static boolean isInit = false;
- public static synchronized void initSingleton(boolean firstX11ActionOnProcess) {
+ public static synchronized void initSingleton() {
if(!isInit) {
synchronized(X11Util.class) {
if(!isInit) {
- isInit = true;
+ if(DEBUG) {
+ System.out.println("GDI.initSingleton()");
+ }
if(!NWJNILibLoader.loadNativeWindow("win32")) {
throw new NativeWindowException("NativeWindow Windows native library load error.");
}
-
if( !initIDs0() ) {
throw new NativeWindowException("GDI: Could not initialized native stub");
}
-
- if(DEBUG) {
- System.out.println("GDI.isFirstX11ActionOnProcess: "+firstX11ActionOnProcess);
- }
-
- dummyWindowClassFactory = new RegisteredClassFactory(dummyWindowClassNameBase, getDummyWndProc0());
+ dummyWindowClassFactory = new RegisteredClassFactory(dummyWindowClassNameBase, getDummyWndProc0());
+ isInit = true;
}
}
}
diff --git a/src/nativewindow/classes/jogamp/nativewindow/x11/X11Util.java b/src/nativewindow/classes/jogamp/nativewindow/x11/X11Util.java
index 7b46a1df0..860238649 100644
--- a/src/nativewindow/classes/jogamp/nativewindow/x11/X11Util.java
+++ b/src/nativewindow/classes/jogamp/nativewindow/x11/X11Util.java
@@ -95,18 +95,20 @@ public class X11Util {
private static Object setX11ErrorHandlerLock = new Object();
- @SuppressWarnings("unused")
- public static void initSingleton(final boolean firstX11ActionOnProcess) {
+ public static void initSingleton() {
if(!isInit) {
synchronized(X11Util.class) {
if(!isInit) {
isInit = true;
+ if(DEBUG) {
+ System.out.println("X11UtilUtil.initSingleton()");
+ }
if(!NWJNILibLoader.loadNativeWindow("x11")) {
throw new NativeWindowException("NativeWindow X11 native library load error.");
}
- final boolean callXInitThreads = XINITTHREADS_ALWAYS_ENABLED || firstX11ActionOnProcess;
- final boolean isXInitThreadsOK = initialize0( XINITTHREADS_ALWAYS_ENABLED || firstX11ActionOnProcess, XERROR_STACKDUMP);
+ final boolean callXInitThreads = XINITTHREADS_ALWAYS_ENABLED ;
+ final boolean isXInitThreadsOK = initialize0( callXInitThreads, XERROR_STACKDUMP);
isX11LockAvailable = isXInitThreadsOK && !HAS_XLOCKDISPLAY_BUG ;
final long dpy = X11Lib.XOpenDisplay(null);
@@ -124,8 +126,7 @@ public class X11Util {
}
if(DEBUG) {
- System.err.println("X11Util firstX11ActionOnProcess: "+firstX11ActionOnProcess+
- ", requiresX11Lock "+requiresX11Lock+
+ System.err.println("X11Util requiresX11Lock "+requiresX11Lock+
", XInitThreads [called "+callXInitThreads+", OK "+isXInitThreadsOK+"]"+
", isX11LockAvailable "+isX11LockAvailable+
", X11 Display(NULL) <"+nullDisplayName+">"+