From 3c6a7838b1a647b42cc8b37d1a433ed9a1431860 Mon Sep 17 00:00:00 2001
From: Sven Gothel <sgothel@jausoft.com>
Date: Thu, 18 Jun 2009 06:50:13 +0000
Subject: - Fix: X11 locking     The current thread default display or     the
 given display is being used,     hence it is no more required to use a
 ToolkitLock     for X11 without AWT.

    Removed X11 ToolkitLock in case of X11 without AWT,
    which is being detected with the absence of the classes
        java.awt.Component _AND_ javax.media.nativewindow.awt.AWTGraphicsDevice
    or with the system property
        java.awt.headless=true

    Only in the Java2D/Swing case, one 'leaking' Display
    is created within canCreateGLPbuffer().

- Workaround for Hotsport bugs #4395095, #6852404
    4395095 JNI access to java.nio DirectBuffer constructor/accessor
    6852404 Race condition in JNI Direct Buffer access and creation routines


- Added build.xml
    -Dbuild.noarchives=true property to skip the time consuming
    creation of zip archives.




git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/svn-server-sync/jogl/trunk@1988 232f8b59-042b-4e1e-8c03-345bb8c30851
---
 src/newt/native/X11Window.c | 52 ++++++++++++---------------------------------
 1 file changed, 13 insertions(+), 39 deletions(-)

(limited to 'src/newt/native/X11Window.c')

diff --git a/src/newt/native/X11Window.c b/src/newt/native/X11Window.c
index c239dd780..8651a8cea 100755
--- a/src/newt/native/X11Window.c
+++ b/src/newt/native/X11Window.c
@@ -156,7 +156,7 @@ static jmethodID windowCreatedID = NULL;
 static jmethodID sendMouseEventID = NULL;
 static jmethodID sendKeyEventID = NULL;
 
-static jmethodID displayCreatedID = NULL;
+static jmethodID displayCompletedID = NULL;
 
 static void _throwNewRuntimeException(JNIEnv *env, const char* msg, ...)
 {
@@ -184,8 +184,8 @@ JNIEXPORT jboolean JNICALL Java_com_sun_javafx_newt_x11_X11Display_initIDs
 {
     jclass c;
 
-    displayCreatedID = (*env)->GetMethodID(env, clazz, "displayCreated", "(JJ)V");
-    if (displayCreatedID == NULL) {
+    displayCompletedID = (*env)->GetMethodID(env, clazz, "displayCompleted", "(JJ)V");
+    if (displayCompletedID == NULL) {
         return JNI_FALSE;
     }
 
@@ -223,60 +223,34 @@ JNIEXPORT jboolean JNICALL Java_com_sun_javafx_newt_x11_X11Display_initIDs
 
 /*
  * Class:     com_sun_javafx_newt_x11_X11Display
- * Method:    CreateDisplay
- * Signature: (Ljava/lang/String;)J
+ * Method:    CompleteDisplay
+ * Signature: (J)V
  */
-JNIEXPORT jlong JNICALL Java_com_sun_javafx_newt_x11_X11Display_CreateDisplay
-  (JNIEnv *env, jobject obj, jstring displayName)
+JNIEXPORT void JNICALL Java_com_sun_javafx_newt_x11_X11Display_CompleteDisplay
+  (JNIEnv *env, jobject obj, jlong display)
 {
-    Display * dpy = NULL;
-    const char * _displayName = NULL;
+    Display * dpy = (Display *)(intptr_t)display;
     jlong javaObjectAtom;
     jlong windowDeleteAtom;
-    if(displayName!=0) {
-        _displayName = (*env)->GetStringUTFChars(env, displayName, 0);
-    }
-    DBG_PRINT1("open display connection for %s ..\n", ((NULL==_displayName)?"NULL":_displayName));
-    dpy = XOpenDisplay(_displayName);
     if(dpy==NULL) {
-        _throwNewRuntimeException(env, "couldn't open display connection for %s\n", ((NULL==_displayName)?"NULL":_displayName));
-    }
-    if(_displayName!=0) {
-        (*env)->ReleaseStringChars(env, displayName, (const jchar *)_displayName);
+        _throwNewRuntimeException(env, "given display connection is NULL\n");
     }
 
     javaObjectAtom = (jlong) XInternAtom(dpy, "JOGL_JAVA_OBJECT", False);
     if(None==javaObjectAtom) {
-        XCloseDisplay(dpy);
         _throwNewRuntimeException(env, "could not create Atom JOGL_JAVA_OBJECT, bail out!\n");
-        return 0;
+        return;
     }
 
     windowDeleteAtom = (jlong) XInternAtom(dpy, "WM_DELETE_WINDOW", False);
     if(None==windowDeleteAtom) {
-        XCloseDisplay(dpy);
         _throwNewRuntimeException(env, "could not create Atom WM_DELETE_WINDOW, bail out!\n");
-        return 0;
+        return;
     }
 
-    DBG_PRINT1("X11Display_CreateDisplay dpy %p\n", dpy);
-
-    (*env)->CallVoidMethod(env, obj, displayCreatedID, javaObjectAtom, windowDeleteAtom);
+    DBG_PRINT1("X11Display_completeDisplay dpy %p\n", dpy);
 
-    return (jlong) (intptr_t) dpy;
-}
-
-/*
- * Class:     com_sun_javafx_newt_x11_X11Display
- * Method:    DestroyDisplay
- * Signature: (J)V
- */
-JNIEXPORT void JNICALL Java_com_sun_javafx_newt_x11_X11Display_DestroyDisplay
-  (JNIEnv *env, jobject obj, jlong display)
-{
-    Display * dpy = (Display *)(intptr_t)display;
-    DBG_PRINT1("X11Display_DestroyDisplay dpy %p\n", dpy);
-    XCloseDisplay(dpy);
+    (*env)->CallVoidMethod(env, obj, displayCompletedID, javaObjectAtom, windowDeleteAtom);
 }
 
 static int putPtrIn32Long(unsigned long * dst, uintptr_t src) {
-- 
cgit v1.2.3