aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libjava/include/jawt.h6
-rw-r--r--libjava/include/jawt_md.h1
-rw-r--r--libjava/jawt.c19
-rw-r--r--libjava/jni/classpath/classpath_jawt.h1
-rw-r--r--libjava/jni/gtk-peer/gtk_jawt.c34
5 files changed, 61 insertions, 0 deletions
diff --git a/libjava/include/jawt.h b/libjava/include/jawt.h
index 52cde83..fdff935 100644
--- a/libjava/include/jawt.h
+++ b/libjava/include/jawt.h
@@ -50,8 +50,12 @@ extern "C"
#endif
#define JAWT_VERSION_1_3 0x10003
+#define JAWT_VERSION_1_4 0x10004
#define JAWT_LOCK_ERROR 0x1
+#define JAWT_LOCK_CLIP_CHANGED 0x2
+#define JAWT_LOCK_BOUNDS_CHANGED 0x4
+#define JAWT_LOCK_SURFACE_CHANGED 0x8
struct _JAWT_DrawingSurfaceInfo
{
@@ -77,6 +81,8 @@ struct _JAWT
jint version;
struct _JAWT_DrawingSurface* (JNICALL* GetDrawingSurface) (JNIEnv*, jobject);
void (JNICALL* FreeDrawingSurface) (struct _JAWT_DrawingSurface*);
+ void (JNICALL *Lock) (JNIEnv*);
+ void (JNICALL *Unlock) (JNIEnv*);
};
typedef struct _JAWT_DrawingSurfaceInfo JAWT_DrawingSurfaceInfo;
diff --git a/libjava/include/jawt_md.h b/libjava/include/jawt_md.h
index 94abb57..9e74ec1 100644
--- a/libjava/include/jawt_md.h
+++ b/libjava/include/jawt_md.h
@@ -52,6 +52,7 @@ struct _JAWT_X11DrawingSurfaceInfo
{
Display* display;
Drawable drawable;
+ VisualID visualID;
};
typedef struct _JAWT_X11DrawingSurfaceInfo JAWT_X11DrawingSurfaceInfo;
diff --git a/libjava/jawt.c b/libjava/jawt.c
index c0d65b8..20890da 100644
--- a/libjava/jawt.c
+++ b/libjava/jawt.c
@@ -50,6 +50,8 @@ static void (JNICALL _Jv_FreeDrawingSurfaceInfo)
static JAWT_DrawingSurface* (JNICALL _Jv_GetDrawingSurface) (JNIEnv* env,
jobject canvas);
static void (JNICALL _Jv_FreeDrawingSurface) (JAWT_DrawingSurface* surface);
+static void (JNICALL _Jv_AWTLock) (JNIEnv*);
+static void (JNICALL _Jv_AWTUnlock) (JNIEnv*);
JNIEXPORT jboolean JNICALL
JAWT_GetAWT (JNIEnv* env, JAWT* awt)
@@ -63,6 +65,8 @@ JAWT_GetAWT (JNIEnv* env, JAWT* awt)
awt->GetDrawingSurface = _Jv_GetDrawingSurface;
awt->FreeDrawingSurface = _Jv_FreeDrawingSurface;
+ awt->Lock = _Jv_AWTLock;
+ awt->Unlock = _Jv_AWTUnlock;
return JNI_TRUE;
}
@@ -103,6 +107,7 @@ static void
surface_info_x11->display = NULL;
surface_info_x11->drawable = 0;
+ surface_info_x11->visualID = 0;
free (surface_info);
surface_info = NULL;
@@ -142,6 +147,7 @@ static JAWT_DrawingSurface*
surface_info_x11->display = classpath_jawt_get_default_display (env, canvas);
surface_info_x11->drawable = classpath_jawt_get_drawable (env, canvas);
+ surface_info_x11->visualID = classpath_jawt_get_visualID (env, canvas);
/* FIXME: also include bounding rectangle of drawing surface */
/* FIXME: also include current clipping region */
@@ -154,3 +160,16 @@ static void
{
free (surface);
}
+
+static void
+(JNICALL _Jv_AWTLock) (JNIEnv* env)
+{
+ classpath_jawt_lock ();
+}
+
+static void
+(JNICALL _Jv_AWTUnlock) (JNIEnv* env)
+{
+ classpath_jawt_unlock ();
+}
+
diff --git a/libjava/jni/classpath/classpath_jawt.h b/libjava/jni/classpath/classpath_jawt.h
index 51e6af3..1629505 100644
--- a/libjava/jni/classpath/classpath_jawt.h
+++ b/libjava/jni/classpath/classpath_jawt.h
@@ -53,6 +53,7 @@
jint classpath_jawt_get_awt_version ();
Display* classpath_jawt_get_default_display (JNIEnv* env, jobject canvas);
Drawable classpath_jawt_get_drawable (JNIEnv* env, jobject canvas);
+VisualID classpath_jawt_get_visualID (JNIEnv* env, jobject canvas);
jint classpath_jawt_lock ();
void classpath_jawt_unlock ();
diff --git a/libjava/jni/gtk-peer/gtk_jawt.c b/libjava/jni/gtk-peer/gtk_jawt.c
index 6a12fc7..cba3b15 100644
--- a/libjava/jni/gtk-peer/gtk_jawt.c
+++ b/libjava/jni/gtk-peer/gtk_jawt.c
@@ -85,6 +85,40 @@ classpath_jawt_get_default_display (JNIEnv* env, jobject canvas)
return xdisplay;
}
+VisualID
+classpath_jawt_get_visualID (JNIEnv* env, jobject canvas)
+{
+ GtkWidget *widget;
+ Visual *visual;
+ void *ptr;
+ jobject peer;
+ jclass class_id;
+ jmethodID method_id;
+
+ class_id = (*env)->GetObjectClass (env, canvas);
+
+ method_id = (*env)->GetMethodID (env, class_id,
+ "getPeer",
+ "()Ljava/awt/peer/ComponentPeer;");
+
+ peer = (*env)->CallObjectMethod (env, canvas, method_id);
+
+ ptr = NSA_GET_PTR (env, peer);
+
+ gdk_threads_enter ();
+
+ widget = GTK_WIDGET (ptr);
+
+ g_assert (GTK_WIDGET_REALIZED (widget));
+
+ visual = gdk_x11_visual_get_xvisual (gtk_widget_get_visual (widget));
+ g_assert (visual != NULL);
+
+ gdk_threads_leave ();
+
+ return visual->visualid;
+}
+
Drawable
classpath_jawt_get_drawable (JNIEnv* env, jobject canvas)
{