This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[patch] jawt fixes


Hi,

This patch appears to have been lost in the gui-branch -> mainline
merge.  I just committed it to mainline.  Is it OK for gcc-4_0-branch as
well?

Tom

2005-03-05  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_AWTLock, _Jv_AWTUnlock): 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.

Index: jawt.c
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jawt.c,v
retrieving revision 1.3
diff -u -r1.3 jawt.c
--- jawt.c	5 Mar 2005 07:47:53 -0000	1.3
+++ jawt.c	5 Mar 2005 21:45:47 -0000
@@ -50,6 +50,8 @@
 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 @@
 
   awt->GetDrawingSurface = _Jv_GetDrawingSurface;
   awt->FreeDrawingSurface = _Jv_FreeDrawingSurface;
+  awt->Lock = _Jv_AWTLock;
+  awt->Unlock = _Jv_AWTUnlock;
 
   return JNI_TRUE;
 }
@@ -103,6 +107,7 @@
 
   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 @@
 
   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 @@
 {
   free (surface);
 }
+
+static void
+(JNICALL _Jv_AWTLock) (JNIEnv* env)
+{
+  classpath_jawt_lock ();
+}
+
+static void
+(JNICALL _Jv_AWTUnlock) (JNIEnv* env)
+{
+  classpath_jawt_unlock ();
+}
+
Index: include/jawt.h
===================================================================
RCS file: /cvs/gcc/gcc/libjava/include/jawt.h,v
retrieving revision 1.2
diff -u -r1.2 jawt.h
--- include/jawt.h	14 Feb 2005 21:08:08 -0000	1.2
+++ include/jawt.h	5 Mar 2005 21:45:47 -0000
@@ -50,8 +50,12 @@
 #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 @@
   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: include/jawt_md.h
===================================================================
RCS file: /cvs/gcc/gcc/libjava/include/jawt_md.h,v
retrieving revision 1.2
diff -u -r1.2 jawt_md.h
--- include/jawt_md.h	14 Feb 2005 21:08:08 -0000	1.2
+++ include/jawt_md.h	5 Mar 2005 21:45:47 -0000
@@ -52,6 +52,7 @@
 {
   Display* display;
   Drawable drawable;
+  VisualID visualID;
 };
 
 typedef struct _JAWT_X11DrawingSurfaceInfo JAWT_X11DrawingSurfaceInfo;
Index: jni/classpath/classpath_jawt.h
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/classpath/classpath_jawt.h,v
retrieving revision 1.2
diff -u -r1.2 classpath_jawt.h
--- jni/classpath/classpath_jawt.h	14 Feb 2005 21:08:08 -0000	1.2
+++ jni/classpath/classpath_jawt.h	5 Mar 2005 21:45:47 -0000
@@ -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: jni/gtk-peer/gtk_jawt.c
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gtk_jawt.c,v
retrieving revision 1.2
diff -u -r1.2 gtk_jawt.c
--- jni/gtk-peer/gtk_jawt.c	14 Feb 2005 21:08:08 -0000	1.2
+++ jni/gtk-peer/gtk_jawt.c	5 Mar 2005 21:45:47 -0000
@@ -85,6 +85,40 @@
   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)
 {

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]