gtk_jawt.c (classpath_jawt_get_drawable, [...]): New functions.
authorAnthony Green <green@redhat.com>
Sat, 5 Mar 2005 21:47:10 +0000 (21:47 +0000)
committerThomas Fitzsimmons <fitzsim@gcc.gnu.org>
Sat, 5 Mar 2005 21:47:10 +0000 (21:47 +0000)
2005-02-15  Anthony Green  <green@redhat.com>

* jni/gtk-peer/gtk_jawt.c (classpath_jawt_get_drawable,
classpath_jawt_lock, classpath_jawt_unlock): New functions.
* jawt.c (_Jv_JAWT_Lock, _Jv_JAWT_Unlock): New functions.
(_Jv_GetDrawingSurface): Set visualID.
(_Jv_FreeDrawingSurfaceInfo): Clear visualID.
(JAWT_GetAWT): Set Lock and Unlock.
* include/jawt_md.h (struct _JAWT_X11DrawingSurfaceInfo): Add visualID.
* include/jawt.h (JAWT_VERSION_1_4, JAWT_LOCK_ERROR,
JAWT_LOCK_CLIP_CHANGED, JAWT_LOCK_BOUNDS_CHANGED,
JAWT_LOCK_SURFACE_CHANGED): New macros.
(struct _JAWT): Add Lock and Unlock.

From-SVN: r95943

libjava/include/jawt.h
libjava/include/jawt_md.h
libjava/jawt.c
libjava/jni/classpath/classpath_jawt.h
libjava/jni/gtk-peer/gtk_jawt.c

index 52cde83..fdff935 100644 (file)
@@ -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;
index 94abb57..9e74ec1 100644 (file)
@@ -52,6 +52,7 @@ struct _JAWT_X11DrawingSurfaceInfo
 {
   Display* display;
   Drawable drawable;
+  VisualID visualID;
 };
 
 typedef struct _JAWT_X11DrawingSurfaceInfo JAWT_X11DrawingSurfaceInfo;
index c0d65b8..20890da 100644 (file)
@@ -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 ();
+}
+
index 51e6af3..1629505 100644 (file)
@@ -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 ();
 
index 6a12fc7..cba3b15 100644 (file)
@@ -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)
 {