diff options
author | Andrew John Hughes <gnu_andrew@member.fsf.org> | 2006-07-16 21:51:51 +0000 |
---|---|---|
committer | Andrew John Hughes <gnu_andrew@member.fsf.org> | 2006-07-16 21:51:51 +0000 |
commit | 70d3ca5f03432c9893f4231b9037138e2c5f79d4 (patch) | |
tree | 8f67b77f9ca1944a0946a513046b6a78b7620c30 /native | |
parent | 2191b1e9ed92cdbb924b5adb5be121a018eea109 (diff) | |
download | classpath-70d3ca5f03432c9893f4231b9037138e2c5f79d4.tar.gz |
2006-07-16 Andrew John Hughes <gnu_andrew@member.fsf.org>
* Merge of HEAD --> generics-branch for
2006/07/09 to 2006/07/16.
Diffstat (limited to 'native')
-rw-r--r-- | native/jni/gconf-peer/GConfNativePeer.c | 39 | ||||
-rw-r--r-- | native/jni/gconf-peer/Makefile.am | 6 | ||||
-rw-r--r-- | native/jni/gtk-peer/Makefile.am | 1 | ||||
-rw-r--r-- | native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c | 44 | ||||
-rw-r--r-- | native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c | 32 | ||||
-rw-r--r-- | native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c | 31 | ||||
-rw-r--r-- | native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c | 15 | ||||
-rw-r--r-- | native/jni/java-net/gnu_java_net_local_LocalSocketImpl.c | 44 |
8 files changed, 171 insertions, 41 deletions
diff --git a/native/jni/gconf-peer/GConfNativePeer.c b/native/jni/gconf-peer/GConfNativePeer.c index bc8f78067..011fe8c26 100644 --- a/native/jni/gconf-peer/GConfNativePeer.c +++ b/native/jni/gconf-peer/GConfNativePeer.c @@ -41,6 +41,7 @@ #include <jni.h> #include <glib.h> +#include <gdk/gdk.h> #include <gconf/gconf-client.h> #include "jcl.h" @@ -72,6 +73,7 @@ static jmethodID jlist_add_id = NULL; * Gets the reference of the default GConfClient and initialize the * the type system. * The client reference should be released with g_object_unref after use. + * This functions must be called with gdk lock held. */ static void init_gconf_client (void); @@ -131,7 +133,9 @@ JNICALL Java_gnu_java_util_prefs_gconf_GConfNativePeer_init_1id_1cache { reference_count++; + gdk_threads_enter (); init_gconf_client (); + gdk_threads_leave (); /* if client is null, there is probably an out of memory */ if (client == NULL) @@ -160,6 +164,8 @@ JNIEXPORT jobject JNICALL Java_gnu_java_util_prefs_gconf_GConfNativePeer_gconf_1client_1gconf_1client_1all_1keys (JNIEnv *env, jclass clazz __attribute__ ((unused)), jstring node) { + /* TODO: check all the calls to gdk_threads_enter/leave */ + const char *dir = NULL; GError *err = NULL; GSList *entries = NULL; @@ -174,7 +180,9 @@ Java_gnu_java_util_prefs_gconf_GConfNativePeer_gconf_1client_1gconf_1client_1all return NULL; } + gdk_threads_enter (); entries = gconf_client_all_entries (client, dir, &err); + gdk_threads_leave (); if (err != NULL) { throw_exception_by_name (env, "java/util/prefs/BackingStoreException", @@ -212,7 +220,7 @@ Java_gnu_java_util_prefs_gconf_GConfNativePeer_gconf_1client_1gconf_1client_1all JCL_free_cstring (env, node, dir); g_slist_foreach (entries, (GFunc) gconf_entry_free, NULL); g_slist_free (entries); - + return jlist; } @@ -239,7 +247,9 @@ Java_gnu_java_util_prefs_gconf_GConfNativePeer_gconf_1client_1gconf_1client_1all return NULL; } + gdk_threads_enter (); entries = gconf_client_all_dirs (client, dir, &err); + gdk_threads_leave (); if (err != NULL) { throw_exception_by_name (env, "java/util/prefs/BackingStoreException", @@ -291,7 +301,9 @@ Java_gnu_java_util_prefs_gconf_GConfNativePeer_gconf_1client_1suggest_1sync { GError *err = NULL; + gdk_threads_enter (); gconf_client_suggest_sync (client, &err); + gdk_threads_leave (); if (err != NULL) { throw_exception_by_name (env, "java/util/prefs/BackingStoreException", @@ -320,7 +332,9 @@ Java_gnu_java_util_prefs_gconf_GConfNativePeer_gconf_1client_1unset return JNI_FALSE; } + gdk_threads_enter (); result = gconf_client_unset (client, _key, &err); + gdk_threads_leave (); if (err != NULL) { result = JNI_FALSE; @@ -353,7 +367,9 @@ Java_gnu_java_util_prefs_gconf_GConfNativePeer_gconf_1client_1get_1string return NULL; } + gdk_threads_enter (); _value = gconf_client_get_string (client, _key, &err); + gdk_threads_leave (); JCL_free_cstring (env, key, _key); if (err != NULL) { @@ -365,8 +381,13 @@ Java_gnu_java_util_prefs_gconf_GConfNativePeer_gconf_1client_1get_1string return NULL; } - result = (*env)->NewStringUTF (env, _value); - g_free ((gpointer) _value); + /* Even if Gconf reported no error it is possible that NULL was returned */ + /* and it should be prevented to create a Java string from that value. */ + if (_value != NULL) + { + result = (*env)->NewStringUTF (env, _value); + g_free ((gpointer) _value); + } return result; } @@ -390,12 +411,14 @@ Java_gnu_java_util_prefs_gconf_GConfNativePeer_gconf_1client_1set_1string /* load an UTF string from the virtual machine. */ _key = JCL_jstring_to_cstring (env, key); _value = JCL_jstring_to_cstring (env, value); - if (_key == NULL && _value == NULL) + if (_key == NULL || _value == NULL) { return JNI_FALSE; } + gdk_threads_enter (); result = gconf_client_set_string (client, _key, _value, &err); + gdk_threads_leave (); if (err != NULL) { g_error_free (err); @@ -424,7 +447,9 @@ Java_gnu_java_util_prefs_gconf_GConfNativePeer_gconf_1client_1remove_1dir if (dir == NULL) return; + gdk_threads_enter (); gconf_client_remove_dir (client, dir, NULL); + gdk_threads_leave (); JCL_free_cstring (env, node, dir); } @@ -445,7 +470,9 @@ Java_gnu_java_util_prefs_gconf_GConfNativePeer_gconf_1client_1add_1dir return; /* ignore errors */ + gdk_threads_enter (); gconf_client_add_dir (client, dir, GCONF_CLIENT_PRELOAD_ONELEVEL, NULL); + gdk_threads_leave (); JCL_free_cstring (env, node, dir); } @@ -468,7 +495,9 @@ Java_gnu_java_util_prefs_gconf_GConfNativePeer_gconf_1client_1dir_1exists return value; /* on error return false */ + gdk_threads_enter (); value = gconf_client_dir_exists (client, dir, &err); + gdk_threads_leave (); if (err != NULL) value = JNI_FALSE; @@ -489,7 +518,9 @@ JNICALL Java_gnu_java_util_prefs_gconf_GConfNativePeer_finalize_1class if (reference_count == 0) { /* last reference, free all resources and return */ + gdk_threads_enter (); g_object_unref (G_OBJECT (client)); + gdk_threads_leave (); (*env)->DeleteGlobalRef (env, jlist_class); diff --git a/native/jni/gconf-peer/Makefile.am b/native/jni/gconf-peer/Makefile.am index 4c728fd8c..8192ddc04 100644 --- a/native/jni/gconf-peer/Makefile.am +++ b/native/jni/gconf-peer/Makefile.am @@ -5,10 +5,8 @@ libgconfpeer_la_SOURCES = GConfNativePeer.c libgconfpeer_la_LIBADD = $(top_builddir)/native/jni/classpath/native_state.lo \ $(top_builddir)/native/jni/classpath/jcl.lo -AM_LDFLAGS = @CLASSPATH_MODULE@ @GCONF_LIBS@ -#@CLASSPATH_MODULE@ @GCONF_LIBS@ @CAIRO_LIBS@ @FREETYPE2_LIBS@ \ -# @PANGOFT2_LIBS@ @X_PRE_LIBS@ @X_LIBS@ @X_EXTRA_LIBS@ -lX11 -lXtst +AM_LDFLAGS = @CLASSPATH_MODULE@ @GCONF_LIBS@ @GTK_LIBS@ AM_CPPFLAGS = @CLASSPATH_INCLUDES@ -AM_CFLAGS = @WARNING_CFLAGS@ @ERROR_CFLAGS@ @GCONF_CFLAGS@ +AM_CFLAGS = @WARNING_CFLAGS@ @ERROR_CFLAGS@ @GCONF_CFLAGS@ @GTK_CFLAGS@ diff --git a/native/jni/gtk-peer/Makefile.am b/native/jni/gtk-peer/Makefile.am index 397240270..1e0c97156 100644 --- a/native/jni/gtk-peer/Makefile.am +++ b/native/jni/gtk-peer/Makefile.am @@ -12,7 +12,6 @@ libgtkpeer_la_SOURCES = gnu_java_awt_peer_gtk_CairoSurface.c \ gnu_java_awt_peer_gtk_GdkPixbufDecoder.c \ gnu_java_awt_peer_gtk_GdkRobotPeer.c \ gnu_java_awt_peer_gtk_GdkScreenGraphicsDevice.c \ - gnu_java_awt_peer_gtk_GdkTextLayout.c \ gnu_java_awt_peer_gtk_GtkButtonPeer.c \ gnu_java_awt_peer_gtk_GtkCanvasPeer.c \ gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c \ diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c index 0057c3b8d..f80ae3838 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c @@ -263,6 +263,17 @@ Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSetMatrix } JNIEXPORT void JNICALL +Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoScale +(JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)), + jlong pointer, jdouble x, jdouble y) +{ + struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer); + g_assert (gr != NULL); + + cairo_scale (gr->cr, x, y); +} + +JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoDrawGlyphVector (JNIEnv *env, jobject obj, jlong pointer, jobject font, @@ -473,6 +484,28 @@ Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSetDash } JNIEXPORT void JNICALL +Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSave +(JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)), + jlong pointer) +{ + struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer); + g_assert (gr != NULL); + + cairo_save (gr->cr); +} + +JNIEXPORT void JNICALL +Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoRestore +(JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)), + jlong pointer) +{ + struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer); + g_assert (gr != NULL); + + cairo_restore (gr->cr); +} + +JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoNewPath (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)), jlong pointer) @@ -561,6 +594,17 @@ Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoRectangle } JNIEXPORT void JNICALL +Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoArc +(JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)), + jlong pointer, jdouble x, jdouble y, jdouble radius, jdouble angle1, + jdouble angle2) +{ + struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer); + + cairo_arc (gr->cr, x, y, radius, angle1, angle2); +} + +JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoClosePath (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)), jlong pointer) diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c index 89adcd1e5..6528ad43a 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c @@ -241,3 +241,35 @@ Java_gnu_java_awt_peer_gtk_GdkGraphicsEnvironment_nativeGetDefaultScreenDevice return defaultDevice; } + +JNIEXPORT jintArray JNICALL +Java_gnu_java_awt_peer_gtk_GdkGraphicsEnvironment_getMouseCoordinates +(JNIEnv *env, jobject obj) +{ + jintArray retArray; + jint *values; + GdkDisplay *display; + gint x, y, screenIndex; + GdkScreen *screen; + + display = (GdkDisplay *) NSA_GET_DISPLAY_PTR(env, obj); + g_assert (display != NULL); + + gdk_threads_enter (); + + gdk_display_get_pointer (display, &screen, &x, &y, NULL); + screenIndex = gdk_screen_get_number( screen ); + + gdk_threads_leave (); + + retArray = (*env)->NewIntArray (env, 3); + values = (*env)->GetIntArrayElements (env, retArray, NULL); + + values[0] = screenIndex; + values[1] = x; + values[2] = y; + + (*env)->ReleaseIntArrayElements (env, retArray, values, 0); + + return retArray; +} diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c index c966f6331..8949fa927 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c @@ -387,6 +387,37 @@ Java_gnu_java_awt_peer_gtk_GtkToolkit_getScreenResolution return res; } +/** + * Report the number of mouse buttons + * Returns the number of buttons of the first mouse found, or -1 if no mouse + * seems to be connected. + */ +JNIEXPORT jint JNICALL +Java_gnu_java_awt_peer_gtk_GtkToolkit_getMouseNumberOfButtons + (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused))) +{ + jint res = -1; + GList *devices; + GdkDevice *d; + + gdk_threads_enter (); + + /* FIXME: Why doesn't this return the correct number? */ + devices = gdk_devices_list(); + + while( res == -1 && devices != NULL ) + { + d = GDK_DEVICE( devices->data ); + if( d->source == GDK_SOURCE_MOUSE ) + res = d->num_keys; + devices = devices->next; + } + + gdk_threads_leave (); + + return res; +} + #define CONVERT(type, state) \ gdk_color_to_java_color (style->type[GTK_STATE_ ## state]) diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c index c3ecb00c8..851e2cf48 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c @@ -1245,6 +1245,21 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_gtkWindowSetModal } JNIEXPORT void JNICALL +Java_gnu_java_awt_peer_gtk_GtkWindowPeer_gtkWindowSetAlwaysOnTop + (JNIEnv *env, jobject obj, jboolean alwaysOnTop) +{ + void *ptr; + + gdk_threads_enter (); + + ptr = NSA_GET_PTR (env, obj); + + gtk_window_set_keep_above (GTK_WINDOW (ptr), alwaysOnTop); + + gdk_threads_leave (); +} + +JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setVisibleNative (JNIEnv *env, jobject obj, jboolean visible) { diff --git a/native/jni/java-net/gnu_java_net_local_LocalSocketImpl.c b/native/jni/java-net/gnu_java_net_local_LocalSocketImpl.c index 3b29001a7..35fb6bcdc 100644 --- a/native/jni/java-net/gnu_java_net_local_LocalSocketImpl.c +++ b/native/jni/java-net/gnu_java_net_local_LocalSocketImpl.c @@ -200,22 +200,15 @@ Java_gnu_java_net_local_LocalSocketImpl_accept (JNIEnv *env, jobject this, jobje jint -Java_gnu_java_net_local_LocalSocketImpl_available (JNIEnv *env, jobject this) +Java_gnu_java_net_local_LocalSocketImpl_available +(JNIEnv *env, jobject this __attribute__((unused)), jint fd) { #ifdef ENABLE_LOCAL_SOCKETS - jfieldID socket_fd; - jclass clazz; jint avail; TRACE("begin"); - clazz = (*env)->GetObjectClass (env, this); - socket_fd = (*env)->GetFieldID (env, clazz, "socket_fd", "I"); - if (!socket_fd) - { - return 0; - } - avail = (jint) local_available ((int) (*env)->GetIntField (env, this, socket_fd)); + avail = (jint) local_available (fd); if (avail < 0) { _throw (env, "java/io/IOException", local_error ()); @@ -227,6 +220,7 @@ Java_gnu_java_net_local_LocalSocketImpl_available (JNIEnv *env, jobject this) return avail; #else (void) this; + (void) fd; _throw (env, "java/lang/Error", "support for local sockets not available"); return -1; #endif /* ENABLE_LOCAL_SOCKETS */ @@ -452,14 +446,13 @@ Java_gnu_java_net_local_LocalSocketImpl_localConnect (JNIEnv *env, jobject this, jint -Java_gnu_java_net_local_LocalSocketImpl_read (JNIEnv *env, jobject this, jbyteArray buf, jint off, jint len) +Java_gnu_java_net_local_LocalSocketImpl_read +(JNIEnv *env, jobject this __attribute__((unused)), jint fd, jbyteArray buf, + jint off, jint len) { #ifdef ENABLE_LOCAL_SOCKETS - jfieldID socket_fd; - jclass clazz; jbyte *buffer; jint count; - int fd; TRACE("begin"); @@ -468,13 +461,6 @@ Java_gnu_java_net_local_LocalSocketImpl_read (JNIEnv *env, jobject this, jbyteAr _throw (env, "java/lang/ArrayIndexOutOfBoundsException", ""); } - clazz = (*env)->GetObjectClass (env, this); - socket_fd = (*env)->GetFieldID (env, clazz, "socket_fd", "I"); - if (!socket_fd) - { - return 0; - } - fd = (int) (*env)->GetIntField (env, this, socket_fd); buffer = (*env)->GetByteArrayElements (env, buf, NULL); count = (jint) local_read (fd, (void *) (buffer + off), (int) len); if (count < 0) @@ -488,6 +474,7 @@ Java_gnu_java_net_local_LocalSocketImpl_read (JNIEnv *env, jobject this, jbyteAr return count; #else (void) this; + (void) fd; (void) buf; (void) off; (void) len; @@ -498,13 +485,12 @@ Java_gnu_java_net_local_LocalSocketImpl_read (JNIEnv *env, jobject this, jbyteAr void -Java_gnu_java_net_local_LocalSocketImpl_write (JNIEnv *env, jobject this, jbyteArray buf, jint off, jint len) +Java_gnu_java_net_local_LocalSocketImpl_write +(JNIEnv *env, jobject this __attribute__((unused)), jint fd, jbyteArray buf, + jint off, jint len) { #ifdef ENABLE_LOCAL_SOCKETS - jfieldID socket_fd; - jclass clazz; jbyte *buffer; - int fd; TRACE("begin"); @@ -513,13 +499,6 @@ Java_gnu_java_net_local_LocalSocketImpl_write (JNIEnv *env, jobject this, jbyteA _throw (env, "java/lang/ArrayIndexOutOfBoundsException", ""); } - clazz = (*env)->GetObjectClass (env, this); - socket_fd = (*env)->GetFieldID (env, clazz, "socket_fd", "I"); - if (!socket_fd) - { - return; - } - fd = (int) (*env)->GetIntField (env, this, socket_fd); buffer = (*env)->GetByteArrayElements (env, buf, NULL); if (local_write (fd, (void *) (buffer + off), (int) len) < 0) { @@ -530,6 +509,7 @@ Java_gnu_java_net_local_LocalSocketImpl_write (JNIEnv *env, jobject this, jbyteA TRACE("end"); #else (void) this; + (void) fd; (void) buf; (void) off; (void) len; |