diff options
author | Sven Gothel <[email protected]> | 2012-02-27 18:20:37 +0100 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2012-02-27 18:20:37 +0100 |
commit | b7407c39c0d3785f2fc21782d31c439622f0d744 (patch) | |
tree | 5ef1fc876f54e182fa8cdea0226f55783c324a2f /src/nativewindow/classes | |
parent | f519190f0cf97eb6b3fda61f4eb8c1f55de43b51 (diff) |
NativeWindow: Relax Xinerama dependency / Rename Windows impl subfolder to common name win32 (same as stub_include)
Utilizing dlopen/dlsym in an efficient way relaxes the platform requirement of having Xinerama available.
This allows using Nokia N9 MeeGo out of the box.
Diffstat (limited to 'src/nativewindow/classes')
-rw-r--r-- | src/nativewindow/classes/javax/media/nativewindow/x11/X11GraphicsScreen.java | 3 | ||||
-rw-r--r-- | src/nativewindow/classes/jogamp/nativewindow/x11/X11Util.java | 32 |
2 files changed, 33 insertions, 2 deletions
diff --git a/src/nativewindow/classes/javax/media/nativewindow/x11/X11GraphicsScreen.java b/src/nativewindow/classes/javax/media/nativewindow/x11/X11GraphicsScreen.java index 6473b9f67..ed59861ca 100644 --- a/src/nativewindow/classes/javax/media/nativewindow/x11/X11GraphicsScreen.java +++ b/src/nativewindow/classes/javax/media/nativewindow/x11/X11GraphicsScreen.java @@ -65,8 +65,7 @@ public class X11GraphicsScreen extends DefaultGraphicsScreen implements Cloneabl private static int fetchScreen(X11GraphicsDevice device, int screen) { // It still could be an AWT hold handle .. - long display = device.getHandle(); - if(X11Lib.XineramaEnabled(display)) { + if(X11Util.XineramaIsEnabled(device.getHandle())) { screen = 0; // Xinerama -> 1 screen } return screen; diff --git a/src/nativewindow/classes/jogamp/nativewindow/x11/X11Util.java b/src/nativewindow/classes/jogamp/nativewindow/x11/X11Util.java index 7e5155771..4cbc1e367 100644 --- a/src/nativewindow/classes/jogamp/nativewindow/x11/X11Util.java +++ b/src/nativewindow/classes/jogamp/nativewindow/x11/X11Util.java @@ -485,6 +485,38 @@ public class X11Util { } } + static volatile boolean XineramaFetched = false; + static long XineramaLibHandle = 0; + static long XineramaQueryFunc = 0; + + public static boolean XineramaIsEnabled(long display) { + if(0==display) { + throw new IllegalArgumentException("Display NULL"); + } + if(!XineramaFetched) { // volatile: ok + synchronized(X11Util.class) { + if( !XineramaFetched ) { + XineramaLibHandle = X11Lib.XineramaGetLibHandle(); + if(0 != XineramaLibHandle) { + XineramaQueryFunc = X11Lib.XineramaGetQueryFunc(XineramaLibHandle); + } + XineramaFetched = true; + } + } + } + if(0!=XineramaQueryFunc) { + final boolean res = X11Lib.XineramaIsEnabled(XineramaQueryFunc, display); + if(DEBUG) { + System.err.println("XineramaIsEnabled: "+res); + } + return res; + } else if(DEBUG) { + System.err.println("XineramaIsEnabled: Couldn't bind to Xinerama - lib 0x"+Long.toHexString(XineramaLibHandle)+ + "query 0x"+Long.toHexString(XineramaQueryFunc)); + } + return false; + } + private static native boolean initialize0(boolean firstUIActionOnProcess); private static native void shutdown0(); private static native void setX11ErrorHandler0(boolean onoff, boolean quiet); |