aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2012-02-27 18:20:37 +0100
committerSven Gothel <[email protected]>2012-02-27 18:20:37 +0100
commitb7407c39c0d3785f2fc21782d31c439622f0d744 (patch)
tree5ef1fc876f54e182fa8cdea0226f55783c324a2f
parentf519190f0cf97eb6b3fda61f4eb8c1f55de43b51 (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.
-rw-r--r--make/build-nativewindow.xml23
-rw-r--r--make/config/nativewindow/x11-lib.cfg2
-rwxr-xr-xmake/scripts/tests.sh2
-rw-r--r--make/stub_includes/x11/window-lib.c5
-rw-r--r--src/nativewindow/classes/javax/media/nativewindow/x11/X11GraphicsScreen.java3
-rw-r--r--src/nativewindow/classes/jogamp/nativewindow/x11/X11Util.java32
-rw-r--r--src/nativewindow/native/win32/GDImisc.c (renamed from src/nativewindow/native/windows/GDImisc.c)0
-rw-r--r--src/nativewindow/native/win32/WindowsDWM.c (renamed from src/nativewindow/native/windows/WindowsDWM.c)0
-rw-r--r--src/nativewindow/native/win32/WindowsDWM.h (renamed from src/nativewindow/native/windows/WindowsDWM.h)0
-rw-r--r--src/nativewindow/native/x11/XineramaHelper.c202
-rw-r--r--src/nativewindow/native/x11/XineramaHelper.h40
-rw-r--r--src/nativewindow/native/x11/Xmisc.c3
-rw-r--r--src/newt/classes/jogamp/newt/driver/x11/X11Screen.java2
13 files changed, 201 insertions, 113 deletions
diff --git a/make/build-nativewindow.xml b/make/build-nativewindow.xml
index 40fd24def..c66a92d09 100644
--- a/make/build-nativewindow.xml
+++ b/make/build-nativewindow.xml
@@ -227,7 +227,7 @@
outputRootDir="${build.nativewindow}"
config="${windowlib.os.cfg}"
includeRefid="stub.includes.fileset.platform"
- literalInclude="${stub.includes.gluegen.gg}"
+ literalInclude="${stub.includes.gluegen.gg}, ${src.c}/${window.os.system}"
emitter="com.jogamp.gluegen.JavaEmitter"
debug="false"
dumpCPP="false">
@@ -372,42 +372,36 @@
<linker id="linker.cfg.freebsd.nativewindow.x11" extends="linker.cfg.freebsd">
<syslibset dir="/usr/local/lib" libs="X11"/>
<syslibset dir="/usr/local/lib" libs="Xxf86vm" />
- <syslibset dir="/usr/local/lib" libs="Xinerama"/>
<syslibset dir="/usr/local/lib" libs="Xrender"/>
</linker>
<linker id="linker.cfg.freebsd.amd64.nativewindow.x11" extends="linker.cfg.freebsd.amd64">
<syslibset dir="/usr/local/lib" libs="X11" />
<syslibset dir="/usr/local/lib" libs="Xxf86vm" />
- <syslibset dir="/usr/local/lib" libs="Xinerama"/>
<syslibset dir="/usr/local/lib" libs="Xrender"/>
</linker>
<linker id="linker.cfg.linux.nativewindow.x11" extends="linker.cfg.linux">
<syslibset libs="X11"/>
<syslibset libs="Xxf86vm" />
- <syslibset libs="Xinerama"/>
<syslibset libs="Xrender"/>
</linker>
<linker id="linker.cfg.linux.x86.nativewindow.x11" extends="linker.cfg.linux.x86">
<syslibset libs="X11"/>
<syslibset libs="Xxf86vm" />
- <syslibset libs="Xinerama"/>
<syslibset libs="Xrender"/>
</linker>
<linker id="linker.cfg.linux.amd64.nativewindow.x11" extends="linker.cfg.linux.amd64">
<syslibset libs="X11"/>
<syslibset libs="Xxf86vm" />
- <syslibset libs="Xinerama"/>
<syslibset libs="Xrender"/>
</linker>
<linker id="linker.cfg.linux.armv7.nativewindow.x11" extends="linker.cfg.linux.armv7">
<syslibset dir="${env.TARGET_PLATFORM_LIBS}" libs="X11" />
<syslibset dir="${env.TARGET_PLATFORM_LIBS}" libs="Xxf86vm" />
- <syslibset dir="${env.TARGET_PLATFORM_LIBS}" libs="Xinerama" />
<syslibset dir="${env.TARGET_PLATFORM_LIBS}" libs="Xrender" />
</linker>
@@ -415,9 +409,7 @@
<linkerarg value="-L/usr/sfw/lib"/>
<syslibset libs="X11"/>
<syslibset libs="Xxf86vm" />
- <syslibset libs="Xinerama"/>
<syslibset libs="Xrender"/>
- <syslibset libs="X11"/>
</linker>
<linker id="linker.cfg.solaris.sparcv9.nativewindow.x11" extends="linker.cfg.solaris.sparcv9">
@@ -425,9 +417,7 @@
<linkerarg value="-L/usr/sfw/lib/sparcv9"/>
<syslibset libs="X11"/>
<syslibset libs="Xxf86vm" />
- <syslibset libs="Xinerama"/>
<syslibset libs="Xrender"/>
- <syslibset libs="X11"/>
</linker>
<linker id="linker.cfg.solaris.amd64.nativewindow.x11" extends="linker.cfg.solaris.amd64">
@@ -435,9 +425,7 @@
<linkerarg value="-L/usr/sfw/lib/amd64"/>
<syslibset libs="X11"/>
<syslibset libs="Xxf86vm" />
- <syslibset libs="Xinerama"/>
<syslibset libs="Xrender"/>
- <syslibset libs="X11"/>
</linker>
<linker id="linker.cfg.win32.mingw.nativewindow" extends="linker.cfg.win32.mingw">
@@ -468,7 +456,7 @@
<linker id="linker.cfg.hpux.nativewindow" extends="linker.cfg.hpux">
<syslibset dir="/usr/lib" libs="X11"/>
- <syslibset dir="/usr/lib" libs="Xinerama"/>
+ <syslibset dir="/usr/lib" libs="Xrender"/>
</linker>
</target>
@@ -665,8 +653,8 @@
<patternset id="c.src.files.windows">
<include name="${rootrel.generated.c}/Windows/GDI*.c"/>
- <include name="${rootrel.src.c}/windows/GDImisc.c"/>
- <include name="${rootrel.src.c}/windows/WindowsDWM.c"/>
+ <include name="${rootrel.src.c}/win32/GDImisc.c"/>
+ <include name="${rootrel.src.c}/win32/WindowsDWM.c"/>
<include name="${rootrel.src.c}/NativewindowCommon.c"/>
</patternset>
@@ -710,7 +698,8 @@
<includepath path="${src.generated.c}/X11" if="isX11"/>
<includepath path="${src.generated.c}/MacOSX" if="isOSX"/>
<includepath path="${src.generated.c}/Windows" if="isWindows"/>
- <includepath path="${src.c}/windows" if="isWindows"/>
+ <includepath path="${src.c}/win32" if="isWindows"/>
+ <includepath path="${src.c}/x11" if="isX11"/>
<includepath path="${src.c}"/>
<!-- This must come last to not override real include paths -->
diff --git a/make/config/nativewindow/x11-lib.cfg b/make/config/nativewindow/x11-lib.cfg
index 2fe45cf12..ed8c13b54 100644
--- a/make/config/nativewindow/x11-lib.cfg
+++ b/make/config/nativewindow/x11-lib.cfg
@@ -21,6 +21,7 @@ Opaque long Display *
Opaque boolean Bool
Opaque long GLXFBConfig
Opaque long Visual *
+Opaque long void *
IncludeAs CustomJavaCode X11Lib x11-CustomJavaCode.java
@@ -46,4 +47,5 @@ CustomCCode #include <gluegen_stddef.h>
CustomCCode #include <X11/Xlib.h>
CustomCCode #include <X11/Xutil.h>
CustomCCode #include <X11/extensions/Xrender.h>
+CustomCCode #include <XineramaHelper.h>
diff --git a/make/scripts/tests.sh b/make/scripts/tests.sh
index 8a861679f..c2905ea2e 100755
--- a/make/scripts/tests.sh
+++ b/make/scripts/tests.sh
@@ -50,7 +50,7 @@ function jrun() {
swton=$1
shift
- D_ARGS="-Dnewt.test.Screen.disableScreenMode -Dnewt.debug.Screen"
+ #D_ARGS="-Dnewt.test.Screen.disableScreenMode -Dnewt.debug.Screen"
#D_ARGS="-Djogl.debug.ExtensionAvailabilityCache -Djogl.debug=all -Dnativewindow.debug=all -Djogamp.debug.ProcAddressHelper=true -Djogamp.debug.NativeLibrary=true -Djogamp.debug.NativeLibrary.Lookup=true"
#D_ARGS="-Djogamp.debug=all -Dnativewindow.debug=all -Djogl.debug=all -Dnewt.debug=all"
#D_ARGS="-Dnewt.debug.MainThread"
diff --git a/make/stub_includes/x11/window-lib.c b/make/stub_includes/x11/window-lib.c
index 7b6da3c65..bc5df4ae4 100644
--- a/make/stub_includes/x11/window-lib.c
+++ b/make/stub_includes/x11/window-lib.c
@@ -8,6 +8,8 @@
#define _Xconst const
#endif /* _Xconst */
+#include <XineramaHelper.h>
+
extern intptr_t XSynchronize(Display *display, Bool onoff);
extern int XFlush(Display *display);
@@ -52,9 +54,6 @@ extern int XFree(
void* /* data */
);
-// Helper routine for querying whether Xinerama is enabled.
-Bool XineramaEnabled(Display* display);
-
// Routines for changing gamma settings.
// Note that these are not currently supported on Solaris.
Bool XF86VidModeGetGammaRampSize(
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);
diff --git a/src/nativewindow/native/windows/GDImisc.c b/src/nativewindow/native/win32/GDImisc.c
index 3ab7f9859..3ab7f9859 100644
--- a/src/nativewindow/native/windows/GDImisc.c
+++ b/src/nativewindow/native/win32/GDImisc.c
diff --git a/src/nativewindow/native/windows/WindowsDWM.c b/src/nativewindow/native/win32/WindowsDWM.c
index cc9ed6d8c..cc9ed6d8c 100644
--- a/src/nativewindow/native/windows/WindowsDWM.c
+++ b/src/nativewindow/native/win32/WindowsDWM.c
diff --git a/src/nativewindow/native/windows/WindowsDWM.h b/src/nativewindow/native/win32/WindowsDWM.h
index 36f82fc94..36f82fc94 100644
--- a/src/nativewindow/native/windows/WindowsDWM.h
+++ b/src/nativewindow/native/win32/WindowsDWM.h
diff --git a/src/nativewindow/native/x11/XineramaHelper.c b/src/nativewindow/native/x11/XineramaHelper.c
index 62c02c8c8..ffd66a1b9 100644
--- a/src/nativewindow/native/x11/XineramaHelper.c
+++ b/src/nativewindow/native/x11/XineramaHelper.c
@@ -1,122 +1,152 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- * Copyright (c) 2010 JogAmp Community. All rights reserved.
+/**
+ * Copyright 2011 JogAmp Community. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
*
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
*
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
*
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MIDROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+ * The views and conclusions contained in the software and documentation are those of the
+ * authors and should not be interpreted as representing official policies, either expressed
+ * or implied, of JogAmp Community.
*/
-/* This file contains a helper routine to be called by Java code to
- determine whether the Xinerama extension is in use and therefore to
- treat the multiple AWT screens as one large screen. */
+#include <XineramaHelper.h>
-#include <gluegen_stdint.h>
-#include <X11/Xlib.h>
#include <stdio.h>
+#include <dlfcn.h>
+
+// #define DEBUG 1
+
+static const char* XinExtName = "XINERAMA";
#ifdef __sun_obsolete
-typedef Status XineramaGetInfoFunc(Display* display, int screen_number,
+static const char* XineramaLibNames[] = { "libXext.so", NULL } ;
+static const char* XineramaGetInfoName = "XineramaGetInfo";
+
+typedef Status (* PFNXineramaGetInfoPROC) (Display* display, int screen_number,
XRectangle* framebuffer_rects, unsigned char* framebuffer_hints,
int* num_framebuffers);
-typedef Status XineramaGetCenterHintFunc(Display* display, int screen_number,
- int* x, int* y);
-
-XineramaGetCenterHintFunc* XineramaSolarisCenterFunc = NULL;
-#include <dlfcn.h>
#else
-#include <X11/extensions/Xinerama.h>
+static const char* XineramaLibNames[]= { "libXinerama.so.1", "libXinerama.so", NULL };
+static const char* XineramaIsActiveName = "XineramaIsActive";
-#endif
+typedef Bool (* PFNXineramaIsActivePROC) (Display *display);
-Bool XineramaEnabled(Display* display) {
-#ifdef __sun_obsolete
+#endif
-#define MAXFRAMEBUFFERS 16
- char* XinExtName = "XINERAMA";
- int32_t major_opcode, first_event, first_error;
- Bool gotXinExt = False;
- void* libHandle = 0;
- unsigned char fbhints[MAXFRAMEBUFFERS];
- XRectangle fbrects[MAXFRAMEBUFFERS];
- int locNumScr = 0;
- Bool usingXinerama = False;
+static Bool XineramaIsEnabledPlatform(void *xineramaQueryFunc, Display* display) {
+ Bool res = False;
+ #ifdef __sun_obsolete
+ #define MAXFRAMEBUFFERS 16
+ unsigned char fbhints[MAXFRAMEBUFFERS];
+ XRectangle fbrects[MAXFRAMEBUFFERS];
+ int locNumScr = 0;
+
+ if(NULL!=xineramaQueryFunc && NULL!=display) {
+ PFNXineramaGetInfoPROC XineramaSolarisPROC = (PFNXineramaGetInfoPROC)xineramaQueryFunc;
+ res = XineramaSolarisPROC(display, 0, &fbrects[0], &fbhints[0], &locNumScr) != 0;
+ }
+ #else
+ if(NULL!=xineramaQueryFunc && NULL!=display) {
+ PFNXineramaIsActivePROC XineramaIsActivePROC = (PFNXineramaIsActivePROC) xineramaQueryFunc;
+ res = XineramaIsActivePROC(display);
+ }
+ #endif
+ return res;
+}
- char* XineramaLibName= "libXext.so";
- char* XineramaGetInfoName = "XineramaGetInfo";
- char* XineramaGetCenterHintName = "XineramaGetCenterHint";
- XineramaGetInfoFunc* XineramaSolarisFunc = NULL;
+void* XineramaGetLibHandle() {
+ void* xineramaLibHandle = NULL;
+ int i;
- gotXinExt = XQueryExtension(display, XinExtName, &major_opcode,
- &first_event, &first_error);
+ for(i=0; NULL==xineramaLibHandle && NULL!=XineramaLibNames[i]; i++) {
+ xineramaLibHandle = dlopen(XineramaLibNames[i], RTLD_LAZY | RTLD_GLOBAL);
+ }
- if (gotXinExt) {
- /* load library, load and run XineramaGetInfo */
- libHandle = dlopen(XineramaLibName, RTLD_LAZY | RTLD_GLOBAL);
- if (libHandle != 0) {
- XineramaSolarisFunc = (XineramaGetInfoFunc*)dlsym(libHandle, XineramaGetInfoName);
- XineramaSolarisCenterFunc =
- (XineramaGetCenterHintFunc*)dlsym(libHandle,
- XineramaGetCenterHintName);
- if (XineramaSolarisFunc != NULL) {
- if ((*XineramaSolarisFunc)(display, 0, &fbrects[0],
- &fbhints[0], &locNumScr) != 0) {
-
- usingXinerama = True;
- }
- }
- dlclose(libHandle);
+ #ifdef DEBUG
+ if(NULL!=xineramaLibHandle) {
+ fprintf(stderr, "XineramaGetLibHandle: using lib %s -> %p\n", XineramaLibNames[i-1], xineramaLibHandle);
+ } else {
+ fprintf(stderr, "XineramaGetLibHandle: no native lib available\n");
}
+ #endif
+
+ return xineramaLibHandle;
+}
+
+Bool XineramaReleaseLibHandle(void* xineramaLibHandle) {
+ #ifdef DEBUG
+ fprintf(stderr, "XineramaReleaseLibHandle: release lib %p\n", xineramaLibHandle);
+ #endif
+ if(NULL==xineramaLibHandle) {
+ return False;
}
- return usingXinerama;
-
-#else
+ return 0 == dlclose(xineramaLibHandle) ? True : False;
+}
+
+void* XineramaGetQueryFunc(void *xineramaLibHandle) {
+ void * funcptr = NULL;
- static const char* XinExtName = "XINERAMA";
+ if(NULL==xineramaLibHandle) {
+ return NULL;
+ }
+
+ #ifdef __sun_obsolete
+ #ifdef DEBUG
+ fprintf(stderr, "XineramaGetQueryFunc: trying func %p -> %s\n", xineramaLibHandle, XineramaGetInfoName);
+ #endif
+ funcptr = dlsym(xineramaLibHandle, XineramaGetInfoName);
+ #else
+ #ifdef DEBUG
+ fprintf(stderr, "XineramaGetQueryFunc: trying func %p -> %s\n", xineramaLibHandle, XineramaIsActiveName);
+ #endif
+ funcptr = dlsym(xineramaLibHandle, XineramaIsActiveName);
+ #endif
+ #ifdef DEBUG
+ fprintf(stderr, "XineramaGetQueryFunc: got func %p\n", funcptr);
+ #endif
+ return funcptr;
+}
+
+Bool XineramaIsEnabled(void *xineramaQueryFunc, Display* display) {
int32_t major_opcode, first_event, first_error;
Bool gotXinExt = False;
- Bool isXinActive = False;
+ Bool res = False;
- // fprintf(stderr, "XineramaEnabled: p0\n"); fflush(stderr);
+ if(NULL==xineramaQueryFunc || NULL==display) {
+ return False;
+ }
gotXinExt = XQueryExtension(display, XinExtName, &major_opcode,
&first_event, &first_error);
- // fprintf(stderr, "XineramaEnabled: p1 gotXinExt %d\n",gotXinExt); fflush(stderr);
- if (gotXinExt) {
- isXinActive = XineramaIsActive(display);
- }
- // fprintf(stderr, "XineramaEnabled: p2 XineramaIsActive %d\n", isXinActive); fflush(stderr);
+ #ifdef DEBUG
+ fprintf(stderr, "XineramaIsEnabled: has Xinerama Ext: ext %d, query-func %p\n", gotXinExt, xineramaQueryFunc);
+ #endif
- return isXinActive;
+ if(gotXinExt) {
+ res = XineramaIsEnabledPlatform(xineramaQueryFunc, display);
+ }
-#endif
+ return res;
}
diff --git a/src/nativewindow/native/x11/XineramaHelper.h b/src/nativewindow/native/x11/XineramaHelper.h
new file mode 100644
index 000000000..42b6a03ae
--- /dev/null
+++ b/src/nativewindow/native/x11/XineramaHelper.h
@@ -0,0 +1,40 @@
+/**
+ * Copyright 2011 JogAmp Community. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and documentation are those of the
+ * authors and should not be interpreted as representing official policies, either expressed
+ * or implied, of JogAmp Community.
+ */
+
+#ifndef XineramaHelper_h
+#define XineramaHelper_h
+
+#include <gluegen_stdint.h>
+#include <X11/Xlib.h>
+
+void* XineramaGetLibHandle();
+Bool XineramaReleaseLibHandle(void* xineramaLibHandle);
+void* XineramaGetQueryFunc(void *xineramaLibHandle);
+Bool XineramaIsEnabled(void *xineramaQueryFunc, Display* display);
+
+#endif /* XineramaHelper_h */
diff --git a/src/nativewindow/native/x11/Xmisc.c b/src/nativewindow/native/x11/Xmisc.c
index d28891cda..a99499879 100644
--- a/src/nativewindow/native/x11/Xmisc.c
+++ b/src/nativewindow/native/x11/Xmisc.c
@@ -91,9 +91,6 @@ Bool XF86VidModeSetGammaRamp(
#define DBG_PRINT(args...)
#endif
-/* Need to pull this in as we don't have a stub header for it */
-extern Bool XineramaEnabled(Display* display);
-
static const char * const ClazzNameBuffers = "com/jogamp/common/nio/Buffers";
static const char * const ClazzNameBuffersStaticCstrName = "copyByteBuffer";
static const char * const ClazzNameBuffersStaticCstrSignature = "(Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;";
diff --git a/src/newt/classes/jogamp/newt/driver/x11/X11Screen.java b/src/newt/classes/jogamp/newt/driver/x11/X11Screen.java
index ba1aed308..b688c6870 100644
--- a/src/newt/classes/jogamp/newt/driver/x11/X11Screen.java
+++ b/src/newt/classes/jogamp/newt/driver/x11/X11Screen.java
@@ -277,7 +277,7 @@ public class X11Screen extends ScreenImpl {
private class XineramaEnabledQuery implements DisplayImpl.DisplayRunnable<Boolean> {
public Boolean run(long dpy) {
- return new Boolean(X11Lib.XineramaEnabled(dpy));
+ return new Boolean(X11Util.XineramaIsEnabled(dpy));
}
}
private XineramaEnabledQuery xineramaEnabledQuery = new XineramaEnabledQuery();