diff options
Diffstat (limited to 'native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c')
-rw-r--r-- | native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c | 75 |
1 files changed, 57 insertions, 18 deletions
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 758399c64..d5c9cb553 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 @@ -1,4 +1,3 @@ - /* gtktoolkit.c -- Native portion of GtkToolkit Copyright (C) 1998, 1999, 2005, 2007, 2010 Free Software Foundation, Inc. @@ -42,6 +41,7 @@ exception statement from your version. */ #include "jcl.h" #define RC_FILE ".classpath-gtkrc" +#define CSS_FILE ".classpath-gtk-keys.css" /* From java.awt.SystemColor */ #define AWT_DESKTOP 0 @@ -152,8 +152,8 @@ Java_gnu_java_awt_peer_gtk_GtkToolkit_gtkInit (JNIEnv *env, { int argc = 1; char **argv; - char *homedir, *rcpath = NULL; - + char *homedir ,*rcpath = NULL; + gtkgenericpeer = (*env)->FindClass(env, "gnu/java/awt/peer/gtk/GtkGenericPeer"); gtkgenericpeer = (*env)->NewGlobalRef(env, gtkgenericpeer); @@ -181,16 +181,18 @@ Java_gnu_java_awt_peer_gtk_GtkToolkit_gtkInit (JNIEnv *env, XSynchronize (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), True); #endif - gtk_widget_set_default_colormap (gdk_rgb_get_colormap ()); - + if ((homedir = getenv ("HOME"))) { + rcpath = (char *) g_malloc (strlen (homedir) + strlen (RC_FILE) + 2); sprintf (rcpath, "%s/%s", homedir, RC_FILE); + } - + + #if GTK_MAJOR_VERSION == 2 gtk_rc_parse ((rcpath) ? rcpath : RC_FILE); - + #endif g_free (rcpath); g_free (argv[0]); g_free (argv); @@ -238,6 +240,7 @@ static void jni_lock_cb() * A callback function that implements gdk_threads_leave(). This is * implemented to wrap the JNI MonitorExit() function. */ + static void jni_unlock_cb() { @@ -273,9 +276,13 @@ init_glib_threads(JNIEnv *env, jint portableNativeSync, jobject lock) global_lock = (*env)->NewGlobalRef(env, lock); gdk_threads_set_lock_functions(&jni_lock_cb, &jni_unlock_cb); } -#if GLIB_MINOR_VERSION < 32 + +#if GLIB_MINOR_VERSION < 32 && GTK_MAJOR_VERSION == 2 g_thread_init(NULL); #endif + + + } else { @@ -372,12 +379,15 @@ Java_gnu_java_awt_peer_gtk_GtkToolkit_gtkMain (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused))) { gdk_threads_enter(); - + #if GTK_MAJOR_VERSION == 2 gtk_init_add (post_set_running_flag, NULL); gtk_quit_add (gtk_main_level (), clear_running_flag, NULL); - + #elif GTK_MAJOR_VERSION == 3 + post_set_running_flag(NULL); + #endif + gtk_main (); - + gdk_threads_leave(); } @@ -386,9 +396,14 @@ Java_gnu_java_awt_peer_gtk_GtkToolkit_gtkQuit (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused))) { gdk_threads_enter (); + + #if GTK_MAJOR_VERSION == 3 + gtk_main_level(); + clear_running_flag(NULL); + #endif gtk_main_quit (); - + gdk_threads_leave (); } @@ -459,23 +474,33 @@ JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_gtk_GtkToolkit_getMouseNumberOfButtons (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused))) { - jint res = -1; - GList *devices; + #if GTK_MAJOR_VERSION == 3 + GdkDeviceManager *gdk_device_manager; + #endif GdkDevice *d; + jint res = -1; + GList *devices; + + gdk_threads_enter (); /* FIXME: Why doesn't this return the correct number? */ + #if GTK_MAJOR_VERSION == 2 devices = gdk_devices_list(); - + #elif GTK_MAJOR_VERSION == 3 + gdk_device_manager = gdk_display_get_device_manager(gdk_display_get_default()); + devices = gdk_device_manager_list_devices(gdk_device_manager, GDK_DEVICE_TYPE_MASTER); + #endif + while( res == -1 && devices != NULL ) { d = GDK_DEVICE( devices->data ); - if( d->source == GDK_SOURCE_MOUSE ) - res = d->num_keys; + if( gdk_device_get_source(d) == GDK_SOURCE_MOUSE ) + res = gdk_device_get_n_keys(d); devices = devices->next; } - + g_list_free(devices); gdk_threads_leave (); return res; @@ -563,11 +588,25 @@ Java_gnu_java_awt_peer_gtk_GtkToolkit_getLockState gint coord; GdkModifierType state, mask; GdkWindow *root_window; + + #if GTK_MAJOR_VERSION == 3 + GdkDeviceManager *dev_manager; + GdkDevice *pointer; + #endif + + gdk_threads_enter (); root_window = gdk_get_default_root_window (); + + #if GTK_MAJOR_VERSION == 2 gdk_window_get_pointer (root_window, &coord, &coord, &state); + #elif GTK_MAJOR_VERSION == 3 + dev_manager = gdk_display_get_device_manager(gdk_window_get_display(root_window)); + pointer = gdk_device_manager_get_client_pointer(dev_manager); + gdk_window_get_device_position (root_window, pointer, &coord, &coord, &state); + #endif switch (key) { |