summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Fitzsimmons <fitzsim@redhat.com>2005-07-14 22:07:01 +0000
committerThomas Fitzsimmons <fitzsim@redhat.com>2005-07-14 22:07:01 +0000
commitd0d32bc1ec2dbe0aea6ae720e1de0c256d8e45e9 (patch)
tree4c52c21989847b6d58d5e1ecde82d78d5f76cc53
parentda95b185bbbfb0430e72b0a736e23d446569ced7 (diff)
downloadclasspath-d0d32bc1ec2dbe0aea6ae720e1de0c256d8e45e9.tar.gz
2005-07-14 Thomas Fitzsimmons <fitzsim@redhat.com>
* gnu/java/awt/peer/gtk/GtkChoicePeer.java (choicePostItemEvent): Rename to postChoiceItemEvent. * gnu/java/awt/peer/gtk/GtkComponentPeer.java (realize): New method. (setNativeEventMask): Likewise. * gnu/java/awt/peer/gtk/GtkGenericPeer.java (printCurrentThread): New method. * gnu/java/awt/peer/gtk/GtkWindowPeer.java (realize): New method. * include/gnu_java_awt_peer_gtk_GtkComponentPeer.h: Regenerate. * include/gnu_java_awt_peer_gtk_GtkWindowPeer.h: Likewise. * native/jni/gtk-peer/gtkpeer.h: Move widget-specific macro, variable and function declarations into the widget-specific file. Add cp_gtk_ namespace prefix to external symbols. (cp_gtk_graphics2d_init_jni): New function. (cp_gtk_graphics_init_jni): Likewise. (cp_gtk_button_init_jni): Likewise. (cp_gtk_checkbox_init_jni): Likewise. (cp_gtk_choice_init_jni): Likewise. (cp_gtk_component_init_jni): Likewise. (cp_gtk_list_init_jni): Likewise. (cp_gtk_menuitem_init_jni): Likewise. (cp_gtk_scrollbar_init_jni): Likewise. (cp_gtk_textcomponent_init_jni): Likewise. (cp_gtk_window_init_jni): Likewise. (cp_gtk_component_connect_expose_signals): Likewise. (cp_gtk_component_connect_focus_signals): Likewise. (cp_gtk_component_connect_mouse_signals): Likewise. (cp_gtk_component_connect_signals): Likewise. (cp_gtk_textcomponent_connect_signals): Likewise. (cp_gtk_print_current_thread): Likewise. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c: Remove file. Move widget-specific functions into the widget-specific files. Break main event handler into multiple widget-specific callbacks. * native/jni/gtk-peer/Makefile.am (libgtkpeer_la_SOURCES): Remove gnu_java_awt_peer_gtk_GtkEvents.c. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c: Add cp_gtk_ namespace prefix to external symbols. Add widget-specific macros, variables and function declarations from gnu_java_awt_peer_gtk_GtkEvents.c. Add widget-specific callbacks to replace main event handling loop. * native/jni/classpath/native_state.c: Likewise. * native/jni/classpath/native_state.h: Likewise. * native/jni/gtk-peer/gdkfont.h: Likewise. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c: Likewise. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c: Likewise. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c: Likewise. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c: Likewise. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c: Likewise. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c: Likewise. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c: Likewise. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c: Likewise. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c: Likewise. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c: Likewise. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c: Likewise. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c: Likewise. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c: Likewise. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c: Likewise. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c: Likewise. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c: Likewise. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c: Likewise. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c: Likewise. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c: Likewise. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c: Likewise. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c: Likewise. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollbarPeer.c: Likewise. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c: Likewise. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c: Likewise. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c: Likewise. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c: Likewise. * native/jni/gtk-peer/gthread-jni.c: Likewise. * native/jni/gtk-peer/gthread-jni.h: Likewise.
-rw-r--r--ChangeLog76
-rw-r--r--gnu/java/awt/peer/gtk/GtkChoicePeer.java2
-rw-r--r--gnu/java/awt/peer/gtk/GtkComponentPeer.java11
-rw-r--r--gnu/java/awt/peer/gtk/GtkGenericPeer.java5
-rw-r--r--gnu/java/awt/peer/gtk/GtkWindowPeer.java2
-rw-r--r--include/gnu_java_awt_peer_gtk_GtkComponentPeer.h1
-rw-r--r--include/gnu_java_awt_peer_gtk_GtkWindowPeer.h1
-rw-r--r--native/jni/classpath/native_state.c24
-rw-r--r--native/jni/classpath/native_state.h16
-rw-r--r--native/jni/gtk-peer/Makefile.am1
-rw-r--r--native/jni/gtk-peer/gdkfont.h28
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c17
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c29
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c27
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c20
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c11
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c2
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c75
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c27
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c29
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c46
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c847
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c1176
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c36
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c8
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c3
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c25
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c8
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c33
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c21
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c2
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c5
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c4
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollbarPeer.c51
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c10
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c18
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c214
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c1463
-rw-r--r--native/jni/gtk-peer/gthread-jni.c50
-rw-r--r--native/jni/gtk-peer/gthread-jni.h4
-rw-r--r--native/jni/gtk-peer/gtkpeer.h453
41 files changed, 2497 insertions, 2384 deletions
diff --git a/ChangeLog b/ChangeLog
index 99fcc1328..fec614512 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,76 @@
+2005-07-14 Thomas Fitzsimmons <fitzsim@redhat.com>
+
+ * gnu/java/awt/peer/gtk/GtkChoicePeer.java (choicePostItemEvent):
+ Rename to postChoiceItemEvent.
+ * gnu/java/awt/peer/gtk/GtkComponentPeer.java (realize): New method.
+ (setNativeEventMask): Likewise.
+ * gnu/java/awt/peer/gtk/GtkGenericPeer.java (printCurrentThread): New method.
+ * gnu/java/awt/peer/gtk/GtkWindowPeer.java (realize): New method.
+ * include/gnu_java_awt_peer_gtk_GtkComponentPeer.h: Regenerate.
+ * include/gnu_java_awt_peer_gtk_GtkWindowPeer.h: Likewise.
+ * native/jni/gtk-peer/gtkpeer.h: Move widget-specific macro,
+ variable and function declarations into the widget-specific file.
+ Add cp_gtk_ namespace prefix to external symbols.
+ (cp_gtk_graphics2d_init_jni): New function.
+ (cp_gtk_graphics_init_jni): Likewise.
+ (cp_gtk_button_init_jni): Likewise.
+ (cp_gtk_checkbox_init_jni): Likewise.
+ (cp_gtk_choice_init_jni): Likewise.
+ (cp_gtk_component_init_jni): Likewise.
+ (cp_gtk_list_init_jni): Likewise.
+ (cp_gtk_menuitem_init_jni): Likewise.
+ (cp_gtk_scrollbar_init_jni): Likewise.
+ (cp_gtk_textcomponent_init_jni): Likewise.
+ (cp_gtk_window_init_jni): Likewise.
+ (cp_gtk_component_connect_expose_signals): Likewise.
+ (cp_gtk_component_connect_focus_signals): Likewise.
+ (cp_gtk_component_connect_mouse_signals): Likewise.
+ (cp_gtk_component_connect_signals): Likewise.
+ (cp_gtk_textcomponent_connect_signals): Likewise.
+ (cp_gtk_print_current_thread): Likewise.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c: Remove
+ file. Move widget-specific functions into the widget-specific
+ files. Break main event handler into multiple widget-specific
+ callbacks.
+ * native/jni/gtk-peer/Makefile.am (libgtkpeer_la_SOURCES): Remove
+ gnu_java_awt_peer_gtk_GtkEvents.c.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c: Add
+ cp_gtk_ namespace prefix to external symbols. Add widget-specific
+ macros, variables and function declarations from
+ gnu_java_awt_peer_gtk_GtkEvents.c. Add widget-specific callbacks
+ to replace main event handling loop.
+ * native/jni/classpath/native_state.c: Likewise.
+ * native/jni/classpath/native_state.h: Likewise.
+ * native/jni/gtk-peer/gdkfont.h: Likewise.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c: Likewise.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c: Likewise.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c: Likewise.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c: Likewise.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c: Likewise.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c: Likewise.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c: Likewise.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c: Likewise.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c: Likewise.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c: Likewise.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c: Likewise.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c: Likewise.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c: Likewise.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c: Likewise.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c: Likewise.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c: Likewise.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c: Likewise.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c: Likewise.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c: Likewise.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c: Likewise.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c: Likewise.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollbarPeer.c: Likewise.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c: Likewise.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c: Likewise.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c: Likewise.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c: Likewise.
+ * native/jni/gtk-peer/gthread-jni.c: Likewise.
+ * native/jni/gtk-peer/gthread-jni.h: Likewise.
+
2005-07-14 Lillian Angel <langel@redhat.com>
* javax/swing/plaf/basic/BasicTreeUI.java
(paintControlIcons): Changed so root does not have control icon.
@@ -62,9 +135,6 @@
2005-07-13 Roman Kennke <roman@kennke.org>
* javax/swing/BoundedRangeModel.java:
-2005-07-13 Roman Kennke <roman@kennke.org>
-
- * javax/swing/BoundedRangeModel.java:
Added/Fixed interface API documentation.
* javax/swing/ButtonModel.java:
Added/Fixed interface API documentation.
diff --git a/gnu/java/awt/peer/gtk/GtkChoicePeer.java b/gnu/java/awt/peer/gtk/GtkChoicePeer.java
index 16eedda47..5028ea779 100644
--- a/gnu/java/awt/peer/gtk/GtkChoicePeer.java
+++ b/gnu/java/awt/peer/gtk/GtkChoicePeer.java
@@ -120,7 +120,7 @@ public class GtkChoicePeer extends GtkComponentPeer
add (item, position);
}
- protected void choicePostItemEvent (String label, int stateChange)
+ protected void postChoiceItemEvent (String label, int stateChange)
{
// Must set our state before notifying listeners
if (stateChange == ItemEvent.SELECTED)
diff --git a/gnu/java/awt/peer/gtk/GtkComponentPeer.java b/gnu/java/awt/peer/gtk/GtkComponentPeer.java
index 099b7252d..1578a9cfc 100644
--- a/gnu/java/awt/peer/gtk/GtkComponentPeer.java
+++ b/gnu/java/awt/peer/gtk/GtkComponentPeer.java
@@ -105,6 +105,13 @@ public class GtkComponentPeer extends GtkGenericPeer
native boolean isRealized ();
+ void realize ()
+ {
+ // Default implementation does nothing
+ }
+
+ native void setNativeEventMask ();
+
void create ()
{
throw new RuntimeException ();
@@ -137,6 +144,10 @@ public class GtkComponentPeer extends GtkGenericPeer
if (awtComponent instanceof Window
|| (parent != null && ! parent.isShowing ()))
setParentAndBounds ();
+
+ setNativeEventMask ();
+
+ realize ();
}
void setParentAndBounds ()
diff --git a/gnu/java/awt/peer/gtk/GtkGenericPeer.java b/gnu/java/awt/peer/gtk/GtkGenericPeer.java
index 669268e92..705eed235 100644
--- a/gnu/java/awt/peer/gtk/GtkGenericPeer.java
+++ b/gnu/java/awt/peer/gtk/GtkGenericPeer.java
@@ -90,4 +90,9 @@ public class GtkGenericPeer
}
native void gtkWidgetModifyFont (String name, int style, int size);
+
+ static void printCurrentThread ()
+ {
+ System.out.println ("gtkgenericpeer, thread: " + Thread.currentThread ());
+ }
}
diff --git a/gnu/java/awt/peer/gtk/GtkWindowPeer.java b/gnu/java/awt/peer/gtk/GtkWindowPeer.java
index bd16f3c76..71e05a87d 100644
--- a/gnu/java/awt/peer/gtk/GtkWindowPeer.java
+++ b/gnu/java/awt/peer/gtk/GtkWindowPeer.java
@@ -63,6 +63,8 @@ public class GtkWindowPeer extends GtkContainerPeer
native void gtkWindowSetResizable (boolean resizable);
native void gtkWindowSetModal (boolean modal);
+ native void realize ();
+
int getWidth ()
{
return awtComponent.getWidth();
diff --git a/include/gnu_java_awt_peer_gtk_GtkComponentPeer.h b/include/gnu_java_awt_peer_gtk_GtkComponentPeer.h
index bc7672999..ea0e8224c 100644
--- a/include/gnu_java_awt_peer_gtk_GtkComponentPeer.h
+++ b/include/gnu_java_awt_peer_gtk_GtkComponentPeer.h
@@ -25,6 +25,7 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetP
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetRequestFocus (JNIEnv *env, jobject);
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetDispatchKeyEvent (JNIEnv *env, jobject, jint, jlong, jint, jint, jint);
JNIEXPORT jboolean JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_isRealized (JNIEnv *env, jobject);
+JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_setNativeEventMask (JNIEnv *env, jobject);
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals (JNIEnv *env, jobject);
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_setNativeBounds (JNIEnv *env, jobject, jint, jint, jint, jint);
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_hide (JNIEnv *env, jobject);
diff --git a/include/gnu_java_awt_peer_gtk_GtkWindowPeer.h b/include/gnu_java_awt_peer_gtk_GtkWindowPeer.h
index d228bc8bb..56fa79c27 100644
--- a/include/gnu_java_awt_peer_gtk_GtkWindowPeer.h
+++ b/include/gnu_java_awt_peer_gtk_GtkWindowPeer.h
@@ -13,6 +13,7 @@ extern "C"
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_gtkWindowSetTitle (JNIEnv *env, jobject, jstring);
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_gtkWindowSetResizable (JNIEnv *env, jobject, jboolean);
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_gtkWindowSetModal (JNIEnv *env, jobject, jboolean);
+JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_realize (JNIEnv *env, jobject);
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_create (JNIEnv *env, jobject, jint, jboolean, jobject);
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_connectSignals (JNIEnv *env, jobject);
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_toBack (JNIEnv *env, jobject);
diff --git a/native/jni/classpath/native_state.c b/native/jni/classpath/native_state.c
index c99a21ee3..3c11b8343 100644
--- a/native/jni/classpath/native_state.c
+++ b/native/jni/classpath/native_state.c
@@ -42,7 +42,7 @@ exception statement from your version. */
#define DEFAULT_TABLE_SIZE 97
struct state_table *
-init_state_table_with_size (JNIEnv * env, jclass clazz, jint size)
+cp_gtk_init_state_table_with_size (JNIEnv * env, jclass clazz, jint size)
{
struct state_table *table;
jfieldID hash;
@@ -67,9 +67,9 @@ init_state_table_with_size (JNIEnv * env, jclass clazz, jint size)
}
struct state_table *
-init_state_table (JNIEnv * env, jclass clazz)
+cp_gtk_init_state_table (JNIEnv * env, jclass clazz)
{
- return init_state_table_with_size (env, clazz, DEFAULT_TABLE_SIZE);
+ return cp_gtk_init_state_table_with_size (env, clazz, DEFAULT_TABLE_SIZE);
}
static void *
@@ -166,7 +166,7 @@ add_node (struct state_node **head, jint obj_id, void *state)
}
void
-set_state_oid (JNIEnv * env, jobject lock, struct state_table *table,
+cp_gtk_set_state_oid (JNIEnv * env, jobject lock, struct state_table *table,
jint obj_id, void *state)
{
jint hash;
@@ -179,7 +179,7 @@ set_state_oid (JNIEnv * env, jobject lock, struct state_table *table,
}
void *
-get_state_oid (JNIEnv * env, jobject lock, struct state_table *table,
+cp_gtk_get_state_oid (JNIEnv * env, jobject lock, struct state_table *table,
jint obj_id)
{
jint hash;
@@ -195,7 +195,7 @@ get_state_oid (JNIEnv * env, jobject lock, struct state_table *table,
}
void *
-remove_state_oid (JNIEnv * env, jobject lock, struct state_table *table,
+cp_gtk_remove_state_oid (JNIEnv * env, jobject lock, struct state_table *table,
jint obj_id)
{
jint hash;
@@ -211,7 +211,7 @@ remove_state_oid (JNIEnv * env, jobject lock, struct state_table *table,
}
int
-set_state (JNIEnv * env, jobject obj, struct state_table *table, void *state)
+cp_gtk_set_state (JNIEnv * env, jobject obj, struct state_table *table, void *state)
{
jint obj_id;
obj_id = (*env)->GetIntField (env, obj, table->hash);
@@ -219,12 +219,12 @@ set_state (JNIEnv * env, jobject obj, struct state_table *table, void *state)
if ((*env)->ExceptionOccurred (env) != NULL)
return -1;
- set_state_oid (env, table->clazz, table, obj_id, state);
+ cp_gtk_set_state_oid (env, table->clazz, table, obj_id, state);
return 0;
}
void *
-get_state (JNIEnv * env, jobject obj, struct state_table *table)
+cp_gtk_get_state (JNIEnv * env, jobject obj, struct state_table *table)
{
jint obj_id;
obj_id = (*env)->GetIntField (env, obj, table->hash);
@@ -232,11 +232,11 @@ get_state (JNIEnv * env, jobject obj, struct state_table *table)
if ((*env)->ExceptionOccurred (env) != NULL)
return NULL;
- return get_state_oid (env, table->clazz, table, obj_id);
+ return cp_gtk_get_state_oid (env, table->clazz, table, obj_id);
}
void *
-remove_state_slot (JNIEnv * env, jobject obj, struct state_table *table)
+cp_gtk_remove_state_slot (JNIEnv * env, jobject obj, struct state_table *table)
{
jint obj_id;
obj_id = (*env)->GetIntField (env, obj, table->hash);
@@ -244,5 +244,5 @@ remove_state_slot (JNIEnv * env, jobject obj, struct state_table *table)
if ((*env)->ExceptionOccurred (env) != NULL)
return NULL;
- return remove_state_oid (env, table->clazz, table, obj_id);
+ return cp_gtk_remove_state_oid (env, table->clazz, table, obj_id);
}
diff --git a/native/jni/classpath/native_state.h b/native/jni/classpath/native_state.h
index 2422fd2a0..641e58882 100644
--- a/native/jni/classpath/native_state.h
+++ b/native/jni/classpath/native_state.h
@@ -55,17 +55,17 @@ struct state_node
struct state_node *next;
};
-struct state_table *init_state_table_with_size (JNIEnv *, jclass, jint);
-struct state_table *init_state_table (JNIEnv *, jclass);
+struct state_table *cp_gtk_init_state_table_with_size (JNIEnv *, jclass, jint);
+struct state_table *cp_gtk_init_state_table (JNIEnv *, jclass);
/* lowlevel api */
-void set_state_oid (JNIEnv *, jobject, struct state_table *, jint, void *);
-void *get_state_oid (JNIEnv *, jobject, struct state_table *, jint);
-void *remove_state_oid (JNIEnv *, jobject, struct state_table *, jint);
+void cp_gtk_set_state_oid (JNIEnv *, jobject, struct state_table *, jint, void *);
+void *cp_gtk_get_state_oid (JNIEnv *, jobject, struct state_table *, jint);
+void *cp_gtk_remove_state_oid (JNIEnv *, jobject, struct state_table *, jint);
/* highlevel api */
-int set_state (JNIEnv *, jobject, struct state_table *, void *);
-void *get_state (JNIEnv *, jobject, struct state_table *);
-void *remove_state_slot (JNIEnv *, jobject, struct state_table *);
+int cp_gtk_set_state (JNIEnv *, jobject, struct state_table *, void *);
+void *cp_gtk_get_state (JNIEnv *, jobject, struct state_table *);
+void *cp_gtk_remove_state_slot (JNIEnv *, jobject, struct state_table *);
#endif
diff --git a/native/jni/gtk-peer/Makefile.am b/native/jni/gtk-peer/Makefile.am
index dcd1d8864..f4e7bdfcc 100644
--- a/native/jni/gtk-peer/Makefile.am
+++ b/native/jni/gtk-peer/Makefile.am
@@ -25,7 +25,6 @@ libgtkpeer_la_SOURCES = $(gtk_cairo_c_source_files) \
gnu_java_awt_peer_gtk_GtkClipboard.c \
gnu_java_awt_peer_gtk_GtkComponentPeer.c \
gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c \
- gnu_java_awt_peer_gtk_GtkEvents.c \
gnu_java_awt_peer_gtk_GtkFileDialogPeer.c \
gnu_java_awt_peer_gtk_GtkFramePeer.c \
gnu_java_awt_peer_gtk_GtkGenericPeer.c \
diff --git a/native/jni/gtk-peer/gdkfont.h b/native/jni/gtk-peer/gdkfont.h
index 1ed08582f..cf2333015 100644
--- a/native/jni/gtk-peer/gdkfont.h
+++ b/native/jni/gtk-peer/gdkfont.h
@@ -45,47 +45,47 @@
#include <pango/pango-fontmap.h>
#include <pango/pangoft2.h>
-extern struct state_table *native_font_state_table;
+extern struct state_table *cp_gtk_native_font_state_table;
extern struct state_table *native_glyphvector_state_table;
-extern struct state_table *native_text_layout_state_table;
+extern struct state_table *cp_gtk_native_text_layout_state_table;
#define NSA_FONT_INIT(env, clazz) \
- native_font_state_table = init_state_table (env, clazz)
+ cp_gtk_native_font_state_table = cp_gtk_init_state_table (env, clazz)
#define NSA_GET_FONT_PTR(env, obj) \
- get_state (env, obj, native_font_state_table)
+ cp_gtk_get_state (env, obj, cp_gtk_native_font_state_table)
#define NSA_SET_FONT_PTR(env, obj, ptr) \
- set_state (env, obj, native_font_state_table, (void *)ptr)
+ cp_gtk_set_state (env, obj, cp_gtk_native_font_state_table, (void *)ptr)
#define NSA_DEL_FONT_PTR(env, obj) \
- remove_state_slot (env, obj, native_font_state_table)
+ cp_gtk_remove_state_slot (env, obj, cp_gtk_native_font_state_table)
#define NSA_GV_INIT(env, clazz) \
- native_glyphvector_state_table = init_state_table (env, clazz)
+ native_glyphvector_state_table = cp_gtk_init_state_table (env, clazz)
#define NSA_GET_GV_PTR(env, obj) \
- get_state (env, obj, native_glyphvector_state_table)
+ cp_gtk_get_state (env, obj, native_glyphvector_state_table)
#define NSA_SET_GV_PTR(env, obj, ptr) \
- set_state (env, obj, native_glyphvector_state_table, (void *)ptr)
+ cp_gtk_set_state (env, obj, native_glyphvector_state_table, (void *)ptr)
#define NSA_DEL_GV_PTR(env, obj) \
- remove_state_slot (env, obj, native_glyphvector_state_table)
+ cp_gtk_remove_state_slot (env, obj, native_glyphvector_state_table)
#define NSA_TEXT_LAYOUT_INIT(env, clazz) \
- native_text_layout_state_table = init_state_table (env, clazz)
+ cp_gtk_native_text_layout_state_table = cp_gtk_init_state_table (env, clazz)
#define NSA_GET_TEXT_LAYOUT_PTR(env, obj) \
- get_state (env, obj, native_text_layout_state_table)
+ cp_gtk_get_state (env, obj, cp_gtk_native_text_layout_state_table)
#define NSA_SET_TEXT_LAYOUT_PTR(env, obj, ptr) \
- set_state (env, obj, native_text_layout_state_table, (void *)ptr)
+ cp_gtk_set_state (env, obj, cp_gtk_native_text_layout_state_table, (void *)ptr)
#define NSA_DEL_TEXT_LAYOUT_PTR(env, obj) \
- remove_state_slot (env, obj, native_text_layout_state_table)
+ cp_gtk_remove_state_slot (env, obj, cp_gtk_native_text_layout_state_table)
#define FONT_METRICS_ASCENT 0
#define FONT_METRICS_MAX_ASCENT 1
diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c
index ba5c23a0c..401d62337 100644
--- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c
+++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c
@@ -38,7 +38,7 @@
#include "gdkfont.h"
#include "gnu_java_awt_peer_gtk_GdkFontPeer.h"
-struct state_table *native_font_state_table;
+struct state_table *cp_gtk_native_font_state_table;
enum java_awt_font_style {
java_awt_font_PLAIN = 0,
@@ -134,7 +134,7 @@ Java_gnu_java_awt_peer_gtk_GdkFontPeer_getGlyphVector
pfont = (struct peerfont *)NSA_GET_FONT_PTR (env, self);
g_assert (pfont != NULL);
- len = (*gdk_env())->GetStringUTFLength (env, chars);
+ len = (*cp_gtk_gdk_env())->GetStringUTFLength (env, chars);
str = (gchar *)(*env)->GetStringUTFChars (env, chars, NULL);
g_assert (str != NULL);
@@ -150,8 +150,12 @@ Java_gnu_java_awt_peer_gtk_GdkFontPeer_getGlyphVector
if (i == NULL)
{
+ gdk_threads_leave ();
+
java_extents = (*env)->NewDoubleArray (env, 0);
java_codes = (*env)->NewIntArray (env, 0);
+
+ gdk_threads_enter ();
}
else
{
@@ -173,8 +177,13 @@ Java_gnu_java_awt_peer_gtk_GdkFontPeer_getGlyphVector
int x = 0;
double scale = ((double) PANGO_SCALE);
+ gdk_threads_leave ();
+
java_extents = (*env)->NewDoubleArray (env, glyphs->num_glyphs * NUM_GLYPH_METRICS);
java_codes = (*env)->NewIntArray (env, glyphs->num_glyphs);
+
+ gdk_threads_enter ();
+
native_extents = (*env)->GetDoubleArrayElements (env, java_extents, NULL);
native_codes = (*env)->GetIntArrayElements (env, java_codes, NULL);
@@ -380,8 +389,8 @@ Java_gnu_java_awt_peer_gtk_GdkFontPeer_setFont
else
{
/* GDK uses a slightly different DPI setting. */
- pango_font_description_set_size (pfont->desc,
- size * dpi_conversion_factor);
+ pango_font_description_set_size (pfont->desc,
+ size * cp_gtk_dpi_conversion_factor);
if (pfont->ctx == NULL)
pfont->ctx = gdk_pango_context_get();
}
diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
index fe9ac8e66..9b2f16e71 100644
--- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
+++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
@@ -41,11 +41,26 @@ exception statement from your version. */
#include <gdk/gdkprivate.h>
#include <gdk/gdkx.h>
+static jmethodID initComponentGraphicsID;
+
+void
+cp_gtk_graphics_init_jni (void)
+{
+ jclass gdkgraphics;
+
+ gdkgraphics = (*cp_gtk_gdk_env())->FindClass (cp_gtk_gdk_env(),
+ "gnu/java/awt/peer/gtk/GdkGraphics");
+
+ initComponentGraphicsID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), gdkgraphics,
+ "initComponentGraphics",
+ "()V");
+}
+
#define GDK_STABLE_IS_PIXMAP(d) (GDK_IS_PIXMAP(d))
-GdkPoint *
-translate_points (JNIEnv *env, jintArray xpoints, jintArray ypoints,
- jint npoints, jint x_offset, jint y_offset);
+static GdkPoint *translate_points (JNIEnv *env, jintArray xpoints,
+ jintArray ypoints, jint npoints,
+ jint x_offset, jint y_offset);
static void realize_cb (GtkWidget *widget, jobject jgraphics);
JNIEXPORT void JNICALL
@@ -108,7 +123,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_initFromImage
gdk_threads_enter ();
- pixmap = gnu_java_awt_peer_gtk_GtkImage_getPixmap(env, source);
+ pixmap = cp_gtk_image_get_pixmap (env, source);
g_assert(pixmap != NULL);
gdk_pixmap_ref (pixmap);
@@ -441,7 +456,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_drawArc
gdk_threads_leave ();
}
-GdkPoint *
+static GdkPoint *
translate_points (JNIEnv *env, jintArray xpoints, jintArray ypoints,
jint npoints, jint x_offset, jint y_offset)
{
@@ -619,9 +634,9 @@ realize_cb (GtkWidget *widget __attribute__ ((unused)), jobject jgraphics)
{
gdk_threads_leave ();
- (*gdk_env())->CallVoidMethod (gdk_env(), jgraphics, initComponentGraphicsID);
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), jgraphics, initComponentGraphicsID);
- NSA_DEL_GLOBAL_REF (gdk_env(), jgraphics);
+ NSA_DEL_GLOBAL_REF (cp_gtk_gdk_env(), jgraphics);
gdk_threads_enter ();
}
diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
index 4176b836c..b4bd676e7 100644
--- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
+++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
@@ -52,19 +52,34 @@
#include <stdio.h>
#include <stdlib.h>
-struct state_table *native_graphics2d_state_table;
+static jmethodID initComponentGraphics2DID;
+
+void
+cp_gtk_graphics2d_init_jni (void)
+{
+ jclass gdkgraphics2d;
+
+ gdkgraphics2d = (*cp_gtk_gdk_env())->FindClass (cp_gtk_gdk_env(),
+ "gnu/java/awt/peer/gtk/GdkGraphics2D");
+
+ initComponentGraphics2DID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), gdkgraphics2d,
+ "initComponentGraphics2D",
+ "()V");
+}
+
+static struct state_table *native_graphics2d_state_table;
#define NSA_G2D_INIT(env, clazz) \
- native_graphics2d_state_table = init_state_table (env, clazz)
+ native_graphics2d_state_table = cp_gtk_init_state_table (env, clazz)
#define NSA_GET_G2D_PTR(env, obj) \
- get_state (env, obj, native_graphics2d_state_table)
+ cp_gtk_get_state (env, obj, native_graphics2d_state_table)
#define NSA_SET_G2D_PTR(env, obj, ptr) \
- set_state (env, obj, native_graphics2d_state_table, (void *)ptr)
+ cp_gtk_set_state (env, obj, native_graphics2d_state_table, (void *)ptr)
#define NSA_DEL_G2D_PTR(env, obj) \
- remove_state_slot (env, obj, native_graphics2d_state_table)
+ cp_gtk_remove_state_slot (env, obj, native_graphics2d_state_table)
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GdkGraphics2D_initStaticState
@@ -356,7 +371,7 @@ realize_cb (GtkWidget *widget __attribute__ ((unused)), jobject peer)
{
gdk_threads_leave ();
- (*gdk_env())->CallVoidMethod (gdk_env(), peer, initComponentGraphics2DID);
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer, initComponentGraphics2DID);
gdk_threads_enter ();
}
diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c
index 7f1678717..648cd6603 100644
--- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c
+++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c
@@ -48,7 +48,19 @@
#include <string.h>
#include <stdlib.h>
-struct state_table *native_pixbufdecoder_state_table;
+static struct state_table *native_pixbufdecoder_state_table;
+
+#define NSA_PB_INIT(env, clazz) \
+ native_pixbufdecoder_state_table = cp_gtk_init_state_table (env, clazz)
+
+#define NSA_GET_PB_PTR(env, obj) \
+ cp_gtk_get_state (env, obj, native_pixbufdecoder_state_table)
+
+#define NSA_SET_PB_PTR(env, obj, ptr) \
+ cp_gtk_set_state (env, obj, native_pixbufdecoder_state_table, (void *)ptr)
+
+#define NSA_DEL_PB_PTR(env, obj) \
+ cp_gtk_remove_state_slot (env, obj, native_pixbufdecoder_state_table)
/* Union used for type punning. */
union env_union
@@ -130,7 +142,13 @@ area_updated_cb (GdkPixbufLoader *loader,
e.jni_env = &env;
(*vm)->GetEnv (vm, e.void_env, JNI_VERSION_1_1);
+
+ gdk_threads_leave ();
+
jpixels = (*env)->NewIntArray (env, n_pixels);
+
+ gdk_threads_enter ();
+
java_pixels = (*env)->GetIntArrayElements (env, jpixels, NULL);
memcpy (java_pixels,
diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c
index 4868ce0bf..8c0ac6ce3 100644
--- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c
+++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c
@@ -205,7 +205,8 @@ Java_gnu_java_awt_peer_gtk_GdkRobotPeer_keyPress
display = gdk_display_get_default ();
xdisplay = GDK_DISPLAY_XDISPLAY (display);
- lookup_keyval = awt_keycode_to_keysym (keycode, AWT_KEY_LOCATION_LEFT);
+ lookup_keyval = cp_gtk_awt_keycode_to_keysym (keycode,
+ AWT_KEY_LOCATION_LEFT);
if (!gdk_keymap_get_entries_for_keyval (gdk_keymap_get_default (),
lookup_keyval,
@@ -249,7 +250,8 @@ Java_gnu_java_awt_peer_gtk_GdkRobotPeer_keyRelease
display = gdk_display_get_default ();
xdisplay = GDK_DISPLAY_XDISPLAY (display);
- lookup_keyval = awt_keycode_to_keysym (keycode, AWT_KEY_LOCATION_LEFT);
+ lookup_keyval = cp_gtk_awt_keycode_to_keysym (keycode,
+ AWT_KEY_LOCATION_LEFT);
if (!gdk_keymap_get_entries_for_keyval (gdk_keymap_get_default (),
lookup_keyval,
@@ -309,7 +311,12 @@ Java_gnu_java_awt_peer_gtk_GdkRobotPeer_nativeGetRGBPixels
n_pixels = height * stride_pixels;
gdk_pixels = gdk_pixbuf_get_pixels (pixbuf);
+ gdk_threads_leave ();
+
jpixels = (*env)->NewIntArray (env, n_pixels);
+
+ gdk_threads_enter ();
+
java_pixels = (*env)->GetIntArrayElements (env, jpixels, NULL);
memcpy (java_pixels,
diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c
index 5966f8947..918ecfd0a 100644
--- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c
+++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c
@@ -42,7 +42,7 @@
#include "gdkfont.h"
#include "gnu_java_awt_peer_gtk_GdkTextLayout.h"
-struct state_table *native_text_layout_state_table;
+struct state_table *cp_gtk_native_text_layout_state_table;
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GdkTextLayout_initStaticState
diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
index 827123d4d..5e8ab26c3 100644
--- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
+++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
@@ -39,12 +39,24 @@ exception statement from your version. */
#include "gtkpeer.h"
#include "gnu_java_awt_peer_gtk_GtkButtonPeer.h"
-static gboolean focus_in_cb (GtkWidget *widget,
- GdkEventFocus *event,
- jobject peer);
-static gboolean focus_out_cb (GtkWidget *widget,
- GdkEventFocus *event,
- jobject peer);
+static jmethodID beginNativeRepaintID;
+static jmethodID endNativeRepaintID;
+
+void
+cp_gtk_button_init_jni (void)
+{
+ jclass gtkbuttonpeer;
+
+ gtkbuttonpeer = (*cp_gtk_gdk_env())->FindClass (cp_gtk_gdk_env(),
+ "gnu/java/awt/peer/gtk/GtkButtonPeer");
+
+ beginNativeRepaintID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), gtkbuttonpeer,
+ "beginNativeRepaint",
+ "()V");
+
+ endNativeRepaintID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), gtkbuttonpeer,
+ "endNativeRepaint", "()V");
+}
static void block_expose_event_cb (GtkWidget *widget,
jobject peer);
@@ -89,24 +101,16 @@ Java_gnu_java_awt_peer_gtk_GtkButtonPeer_connectSignals
button = gtk_bin_get_child (GTK_BIN (ptr));
- g_signal_connect (G_OBJECT (ptr), "event",
- G_CALLBACK (pre_event_handler), *gref);
-
- g_signal_connect (G_OBJECT (button), "event",
- G_CALLBACK (pre_event_handler), *gref);
-
- g_signal_connect (G_OBJECT (button), "focus-in-event",
- G_CALLBACK (focus_in_cb), *gref);
-
- g_signal_connect (G_OBJECT (button), "focus-out-event",
- G_CALLBACK (focus_out_cb), *gref);
-
+ /* Button signals */
g_signal_connect_after (G_OBJECT (button), "pressed",
G_CALLBACK (block_expose_event_cb), *gref);
g_signal_connect_after (G_OBJECT (button), "released",
G_CALLBACK (block_expose_event_cb), *gref);
+ /* Component signals */
+ cp_gtk_component_connect_signals (G_OBJECT (button), gref);
+
gdk_threads_leave ();
}
@@ -154,7 +158,8 @@ Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkWidgetModifyFont
label = gtk_bin_get_child (GTK_BIN (button));
font_desc = pango_font_description_from_string (font_name);
- pango_font_description_set_size (font_desc, size * dpi_conversion_factor);
+ pango_font_description_set_size (font_desc,
+ size * cp_gtk_dpi_conversion_factor);
if (style & AWT_STYLE_BOLD)
pango_font_description_set_weight (font_desc, PANGO_WEIGHT_BOLD);
@@ -312,40 +317,12 @@ Java_gnu_java_awt_peer_gtk_GtkButtonPeer_setNativeBounds
gdk_threads_leave ();
}
-static gboolean
-focus_in_cb (GtkWidget *widget __attribute((unused)),
- GdkEventFocus *event __attribute((unused)),
- jobject peer)
-{
- gdk_threads_leave ();
- (*gdk_env())->CallVoidMethod (gdk_env(), peer,
- postFocusEventID,
- AWT_FOCUS_GAINED,
- JNI_FALSE);
- gdk_threads_enter ();
- return FALSE;
-}
-
-static gboolean
-focus_out_cb (GtkWidget *widget __attribute((unused)),
- GdkEventFocus *event __attribute((unused)),
- jobject peer)
-{
- gdk_threads_leave ();
- (*gdk_env())->CallVoidMethod (gdk_env(), peer,
- postFocusEventID,
- AWT_FOCUS_LOST,
- JNI_FALSE);
- gdk_threads_enter ();
- return FALSE;
-}
-
static void
block_expose_event_cb (GtkWidget *widget, jobject peer)
{
gdk_threads_leave ();
- (*gdk_env())->CallVoidMethod (gdk_env(), peer,
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
beginNativeRepaintID);
gdk_threads_enter ();
@@ -354,7 +331,7 @@ block_expose_event_cb (GtkWidget *widget, jobject peer)
gdk_threads_leave ();
- (*gdk_env())->CallVoidMethod (gdk_env(), peer,
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
endNativeRepaintID);
gdk_threads_enter ();
diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
index f06f0ddd1..cf883dd33 100644
--- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
+++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
@@ -40,6 +40,21 @@ exception statement from your version. */
#include "gnu_java_awt_peer_gtk_GtkCheckboxPeer.h"
#include "gnu_java_awt_peer_gtk_GtkComponentPeer.h"
+static jmethodID postItemEventID;
+
+void
+cp_gtk_checkbox_init_jni (void)
+{
+ jclass gtkcheckboxpeer;
+
+ gtkcheckboxpeer = (*cp_gtk_gdk_env())->FindClass (cp_gtk_gdk_env(),
+ "gnu/java/awt/peer/gtk/GtkCheckboxPeer");
+
+ postItemEventID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), gtkcheckboxpeer,
+ "postItemEvent",
+ "(Ljava/lang/Object;I)V");
+}
+
static void item_toggled_cb (GtkToggleButton *item, jobject peer);
JNIEXPORT void JNICALL
@@ -83,13 +98,14 @@ Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_connectSignals
ptr = NSA_GET_PTR (env, obj);
gref = NSA_GET_GLOBAL_REF (env, obj);
+ /* Checkbox signals */
g_signal_connect (G_OBJECT (ptr), "toggled",
G_CALLBACK (item_toggled_cb), *gref);
- gdk_threads_leave ();
+ /* Component signals */
+ cp_gtk_component_connect_signals (G_OBJECT (ptr), gref);
- /* Connect the superclass signals. */
- Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals (env, obj);
+ gdk_threads_leave ();
}
JNIEXPORT void JNICALL
@@ -168,7 +184,8 @@ Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_gtkWidgetModifyFont
font_name = (*env)->GetStringUTFChars (env, name, NULL);
font_desc = pango_font_description_from_string (font_name);
- pango_font_description_set_size (font_desc, size * dpi_conversion_factor);
+ pango_font_description_set_size (font_desc,
+ size * cp_gtk_dpi_conversion_factor);
if (style & AWT_STYLE_BOLD)
pango_font_description_set_weight (font_desc, PANGO_WEIGHT_BOLD);
@@ -212,7 +229,7 @@ item_toggled_cb (GtkToggleButton *item, jobject peer)
{
gdk_threads_leave ();
- (*gdk_env())->CallVoidMethod (gdk_env(), peer,
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
postItemEventID,
peer,
item->active ?
diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c
index fb9f5c709..ed9df5433 100644
--- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c
+++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c
@@ -39,6 +39,21 @@ exception statement from your version. */
#include "gtkpeer.h"
#include "gnu_java_awt_peer_gtk_GtkChoicePeer.h"
+static jmethodID postChoiceItemEventID;
+
+void
+cp_gtk_choice_init_jni (void)
+{
+ jclass gtkchoicepeer;
+
+ gtkchoicepeer = (*cp_gtk_gdk_env())->FindClass (cp_gtk_gdk_env(),
+ "gnu/java/awt/peer/gtk/GtkChoicePeer");
+
+ postChoiceItemEventID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), gtkchoicepeer,
+ "postChoiceItemEvent",
+ "(Ljava/lang/String;I)V");
+}
+
static void selection_changed_cb (GtkComboBox *combobox, jobject peer);
JNIEXPORT void JNICALL
@@ -72,9 +87,13 @@ Java_gnu_java_awt_peer_gtk_GtkChoicePeer_connectSignals
ptr = NSA_GET_PTR (env, obj);
gref = NSA_GET_GLOBAL_REF (env, obj);
+ /* Choice signals */
g_signal_connect (G_OBJECT (ptr), "changed",
G_CALLBACK (selection_changed_cb), *gref);
+ /* Component signals */
+ cp_gtk_component_connect_signals (G_OBJECT (ptr), gref);
+
gdk_threads_leave ();
}
@@ -215,14 +234,14 @@ static void selection_changed_cb (GtkComboBox *combobox, jobject peer)
model = gtk_combo_box_get_model (combobox);
gtk_combo_box_get_active_iter (combobox, &iter);
gtk_tree_model_get (model, &iter, 0, &selected, -1);
- label = (*gdk_env())->NewStringUTF (gdk_env(), selected);
+ label = (*cp_gtk_gdk_env())->NewStringUTF (cp_gtk_gdk_env(), selected);
gdk_threads_leave ();
- (*gdk_env())->CallVoidMethod (gdk_env(), peer,
- choicePostItemEventID,
- label,
- (jint) AWT_ITEM_SELECTED);
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
+ postChoiceItemEventID,
+ label,
+ (jint) AWT_ITEM_SELECTED);
gdk_threads_enter ();
}
diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c
index cfb21f494..dea9d4cc7 100644
--- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c
+++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c
@@ -39,16 +39,18 @@ exception statement from your version. */
#include "gtkpeer.h"
#include "gnu_java_awt_peer_gtk_GtkClipboard.h"
-jmethodID stringSelectionReceivedID;
-jmethodID stringSelectionHandlerID;
-jmethodID selectionClearID;
+static jmethodID stringSelectionReceivedID;
+static jmethodID stringSelectionHandlerID;
+static jmethodID selectionClearID;
-void selection_received_cb (GtkWidget *, GtkSelectionData *, guint, gpointer);
-void selection_get_cb (GtkWidget *, GtkSelectionData *, guint, guint, gpointer);
-gint selection_clear_cb (GtkWidget *, GdkEventSelection *);
+static void selection_received_cb (GtkWidget *, GtkSelectionData *,
+ guint, gpointer);
+static void selection_get_cb (GtkWidget *, GtkSelectionData *, guint,
+ guint, gpointer);
+static gint selection_clear_cb (GtkWidget *, GdkEventSelection *);
-GtkWidget *clipboard;
-jobject cb_obj;
+static GtkWidget *clipboard;
+static jobject cb_obj;
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkClipboard_initNativeState (JNIEnv *env,
@@ -77,16 +79,16 @@ Java_gnu_java_awt_peer_gtk_GtkClipboard_initNativeState (JNIEnv *env,
clipboard = gtk_window_new (GTK_WINDOW_TOPLEVEL);
g_signal_connect (G_OBJECT(clipboard), "selection_received",
- GTK_SIGNAL_FUNC (selection_received_cb), NULL);
+ G_CALLBACK (selection_received_cb), NULL);
g_signal_connect (G_OBJECT(clipboard), "selection_clear_event",
- GTK_SIGNAL_FUNC (selection_clear_cb), NULL);
+ G_CALLBACK (selection_clear_cb), NULL);
gtk_selection_add_target (clipboard, GDK_SELECTION_PRIMARY,
GDK_TARGET_STRING, 0);
g_signal_connect (G_OBJECT(clipboard), "selection_get",
- GTK_SIGNAL_FUNC (selection_get_cb), NULL);
+ G_CALLBACK (selection_get_cb), NULL);
gdk_threads_leave ();
}
@@ -103,7 +105,7 @@ Java_gnu_java_awt_peer_gtk_GtkClipboard_requestStringConversion
gdk_threads_leave ();
}
-void
+static void
selection_received_cb (GtkWidget *widget __attribute__((unused)),
GtkSelectionData *selection_data __attribute__((unused)),
guint time __attribute__((unused)),
@@ -115,7 +117,7 @@ selection_received_cb (GtkWidget *widget __attribute__((unused)),
{
gdk_threads_leave ();
- (*gdk_env())->CallVoidMethod (gdk_env(), cb_obj, stringSelectionReceivedID,
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), cb_obj, stringSelectionReceivedID,
NULL);
gdk_threads_enter ();
@@ -126,8 +128,8 @@ selection_received_cb (GtkWidget *widget __attribute__((unused)),
gdk_threads_leave ();
- (*gdk_env())->CallVoidMethod (gdk_env(), cb_obj, stringSelectionReceivedID,
- (*gdk_env())->NewStringUTF (gdk_env(), str));
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), cb_obj, stringSelectionReceivedID,
+ (*cp_gtk_gdk_env())->NewStringUTF (cp_gtk_gdk_env(), str));
gdk_threads_enter ();
}
@@ -135,7 +137,7 @@ selection_received_cb (GtkWidget *widget __attribute__((unused)),
return;
}
-void
+static void
selection_get_cb (GtkWidget *widget __attribute__((unused)),
GtkSelectionData *selection_data,
guint info __attribute__((unused)),
@@ -148,7 +150,7 @@ selection_get_cb (GtkWidget *widget __attribute__((unused)),
gdk_threads_leave ();
- jstr = (*gdk_env())->CallObjectMethod (gdk_env(), cb_obj,
+ jstr = (*cp_gtk_gdk_env())->CallObjectMethod (cp_gtk_gdk_env(), cb_obj,
stringSelectionHandlerID);
gdk_threads_enter ();
@@ -160,13 +162,13 @@ selection_get_cb (GtkWidget *widget __attribute__((unused)),
return;
}
- utflen = (*gdk_env())->GetStringUTFLength (gdk_env(), jstr);
- utf = (*gdk_env())->GetStringUTFChars (gdk_env(), jstr, NULL);
+ utflen = (*cp_gtk_gdk_env())->GetStringUTFLength (cp_gtk_gdk_env(), jstr);
+ utf = (*cp_gtk_gdk_env())->GetStringUTFChars (cp_gtk_gdk_env(), jstr, NULL);
gtk_selection_data_set (selection_data, GDK_TARGET_STRING, 8,
(const unsigned char*)utf, utflen);
- (*gdk_env())->ReleaseStringUTFChars (gdk_env(), jstr, utf);
+ (*cp_gtk_gdk_env())->ReleaseStringUTFChars (cp_gtk_gdk_env(), jstr, utf);
}
JNIEXPORT void JNICALL
@@ -188,13 +190,13 @@ Java_gnu_java_awt_peer_gtk_GtkClipboard_selectionGet
gdk_threads_leave ();
}
-gint
+static gint
selection_clear_cb (GtkWidget *widget __attribute__((unused)),
GdkEventSelection *event __attribute__((unused)))
{
gdk_threads_leave ();
- (*gdk_env())->CallVoidMethod (gdk_env(), cb_obj, selectionClearID);
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), cb_obj, selectionClearID);
gdk_threads_enter ();
diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
index 1b8cdb2fd..bd9dde392 100644
--- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
+++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
@@ -40,370 +40,145 @@ exception statement from your version. */
#include "gnu_java_awt_peer_gtk_GtkComponentPeer.h"
#include <gtk/gtkprivate.h>
-#include <gdk/gdkkeysyms.h>
+
+#define AWT_DEFAULT_CURSOR 0
+#define AWT_CROSSHAIR_CURSOR 1
+#define AWT_TEXT_CURSOR 2
+#define AWT_WAIT_CURSOR 3
+#define AWT_SW_RESIZE_CURSOR 4
+#define AWT_SE_RESIZE_CURSOR 5
+#define AWT_NW_RESIZE_CURSOR 6
+#define AWT_NE_RESIZE_CURSOR 7
+#define AWT_N_RESIZE_CURSOR 8
+#define AWT_S_RESIZE_CURSOR 9
+#define AWT_W_RESIZE_CURSOR 10
+#define AWT_E_RESIZE_CURSOR 11
+#define AWT_HAND_CURSOR 12
+#define AWT_MOVE_CURSOR 13
+
+#define AWT_BUTTON1_DOWN_MASK (1 << 10)
+#define AWT_BUTTON2_DOWN_MASK (1 << 11)
+#define AWT_BUTTON3_DOWN_MASK (1 << 12)
+
+/* FIXME: use gtk-double-click-time, gtk-double-click-distance */
+#define MULTI_CLICK_TIME 250
+/* as opposed to a MULTI_PASS_TIME :) */
+
+#define AWT_MOUSE_CLICKED 500
+#define AWT_MOUSE_PRESSED 501
+#define AWT_MOUSE_RELEASED 502
+#define AWT_MOUSE_MOVED 503
+#define AWT_MOUSE_ENTERED 504
+#define AWT_MOUSE_EXITED 505
+#define AWT_MOUSE_DRAGGED 506
+
+#define AWT_FOCUS_GAINED 1004
+#define AWT_FOCUS_LOST 1005
static GtkWidget *find_fg_color_widget (GtkWidget *widget);
static GtkWidget *find_bg_color_widget (GtkWidget *widget);
-static gboolean focus_in_cb (GtkWidget *widget,
- GdkEventFocus *event,
- jobject peer);
-static gboolean focus_out_cb (GtkWidget *widget,
- GdkEventFocus *event,
- jobject peer);
-/*
- * This method returns a GDK keyval that corresponds to one of the
- * keysyms in the X keymap table. The return value is only used to
- * determine the keyval's corresponding hardware keycode, and doesn't
- * reflect an accurate translation of a Java virtual key value to a
- * GDK keyval.
- */
-#ifdef __GNUC__
-__inline
-#endif
-guint
-awt_keycode_to_keysym (jint keyCode, jint keyLocation)
-{
- /* GDK_A through GDK_Z */
- if (keyCode >= VK_A && keyCode <= VK_Z)
- return gdk_keyval_to_lower (keyCode);
+static jmethodID postMouseEventID;
+static jmethodID setCursorID;
+static jmethodID postExposeEventID;
+static jmethodID postFocusEventID;
+
+void
+cp_gtk_component_init_jni (void)
+ {
+ jclass gtkcomponentpeer;
- /* GDK_0 through GDK_9 */
- if (keyCode >= VK_0 && keyCode <= VK_9)
- return keyCode;
+ gtkcomponentpeer = (*cp_gtk_gdk_env())->FindClass (cp_gtk_gdk_env(),
+ "gnu/java/awt/peer/gtk/GtkComponentPeer");
- switch (keyCode)
+ postMouseEventID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), gtkcomponentpeer,
+ "postMouseEvent", "(IJIIIIZ)V");
+
+ setCursorID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), gtkcomponentpeer,
+ "setCursor", "()V");
+
+ postExposeEventID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), gtkcomponentpeer,
+ "postExposeEvent", "(IIII)V");
+
+ postFocusEventID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), gtkcomponentpeer,
+ "postFocusEvent", "(IZ)V");
+}
+
+static gboolean component_button_press_cb (GtkWidget *widget,
+ GdkEventButton *event,
+ jobject peer);
+static gboolean component_button_release_cb (GtkWidget *widget,
+ GdkEventButton *event,
+ jobject peer);
+static gboolean component_motion_notify_cb (GtkWidget *widget,
+ GdkEventMotion *event,
+ jobject peer);
+static gboolean component_enter_notify_cb (GtkWidget *widget,
+ GdkEventCrossing *event,
+ jobject peer);
+static gboolean component_leave_notify_cb (GtkWidget *widget,
+ GdkEventCrossing *event,
+ jobject peer);
+static gboolean component_expose_cb (GtkWidget *widget,
+ GdkEventExpose *event,
+ jobject peer);
+static gboolean component_focus_in_cb (GtkWidget *widget,
+ GdkEventFocus *event,
+ jobject peer);
+static gboolean component_focus_out_cb (GtkWidget *widget,
+ GdkEventFocus *event,
+ jobject peer);
+
+static jint
+button_to_awt_mods (int button)
+{
+ switch (button)
{
- case VK_ENTER:
- return keyLocation == AWT_KEY_LOCATION_NUMPAD ? GDK_KP_Enter : GDK_Return;
- case VK_BACK_SPACE:
- return GDK_BackSpace;
- case VK_TAB:
- return GDK_Tab;
- case VK_CANCEL:
- return GDK_Cancel;
- case VK_CLEAR:
- return GDK_Clear;
- case VK_SHIFT:
- return keyLocation == AWT_KEY_LOCATION_LEFT ? GDK_Shift_L : GDK_Shift_R;
- case VK_CONTROL:
- return keyLocation == AWT_KEY_LOCATION_LEFT ? GDK_Control_L : GDK_Control_R;
- case VK_ALT:
- return keyLocation == AWT_KEY_LOCATION_LEFT ? GDK_Alt_L : GDK_Alt_R;
- case VK_PAUSE:
- return GDK_Pause;
- case VK_CAPS_LOCK:
- return GDK_Caps_Lock;
- case VK_ESCAPE:
- return GDK_Escape;
- case VK_SPACE:
- return GDK_space;
- case VK_PAGE_UP:
- return keyLocation == AWT_KEY_LOCATION_NUMPAD ? GDK_KP_Page_Up : GDK_Page_Up;
- case VK_PAGE_DOWN:
- return keyLocation == AWT_KEY_LOCATION_NUMPAD ? GDK_KP_Page_Down : GDK_Page_Down;
- case VK_END:
- return keyLocation == AWT_KEY_LOCATION_NUMPAD ? GDK_KP_End : GDK_End;
- case VK_HOME:
- return keyLocation == AWT_KEY_LOCATION_NUMPAD ? GDK_KP_Home : GDK_Home;
- case VK_LEFT:
- return GDK_Left;
- case VK_UP:
- return GDK_Up;
- case VK_RIGHT:
- return GDK_Right;
- case VK_DOWN:
- return GDK_Down;
- case VK_COMMA:
- return GDK_comma;
- case VK_MINUS:
- return GDK_minus;
- case VK_PERIOD:
- return GDK_period;
- case VK_SLASH:
- return GDK_slash;
- /*
- case VK_0:
- case VK_1:
- case VK_2:
- case VK_3:
- case VK_4:
- case VK_5:
- case VK_6:
- case VK_7:
- case VK_8:
- case VK_9:
- */
- case VK_SEMICOLON:
- return GDK_semicolon;
- case VK_EQUALS:
- return GDK_equal;
- /*
- case VK_A:
- case VK_B:
- case VK_C:
- case VK_D:
- case VK_E:
- case VK_F:
- case VK_G:
- case VK_H:
- case VK_I:
- case VK_J:
- case VK_K:
- case VK_L:
- case VK_M:
- case VK_N:
- case VK_O:
- case VK_P:
- case VK_Q:
- case VK_R:
- case VK_S:
- case VK_T:
- case VK_U:
- case VK_V:
- case VK_W:
- case VK_X:
- case VK_Y:
- case VK_Z:
- */
- case VK_OPEN_BRACKET:
- return GDK_bracketleft;
- case VK_BACK_SLASH:
- return GDK_backslash;
- case VK_CLOSE_BRACKET:
- return GDK_bracketright;
- case VK_NUMPAD0:
- return GDK_KP_0;
- case VK_NUMPAD1:
- return GDK_KP_1;
- case VK_NUMPAD2:
- return GDK_KP_2;
- case VK_NUMPAD3:
- return GDK_KP_3;
- case VK_NUMPAD4:
- return GDK_KP_4;
- case VK_NUMPAD5:
- return GDK_KP_5;
- case VK_NUMPAD6:
- return GDK_KP_6;
- case VK_NUMPAD7:
- return GDK_KP_7;
- case VK_NUMPAD8:
- return GDK_KP_8;
- case VK_NUMPAD9:
- return GDK_KP_9;
- case VK_MULTIPLY:
- return GDK_KP_Multiply;
- case VK_ADD:
- return GDK_KP_Add;
- /*
- case VK_SEPARATER:
- */
- case VK_SEPARATOR:
- return GDK_KP_Separator;
- case VK_SUBTRACT:
- return GDK_KP_Subtract;
- case VK_DECIMAL:
- return GDK_KP_Decimal;
- case VK_DIVIDE:
- return GDK_KP_Divide;
- case VK_DELETE:
- return keyLocation == AWT_KEY_LOCATION_NUMPAD ? GDK_KP_Delete : GDK_Delete;
- case VK_NUM_LOCK:
- return GDK_Num_Lock;
- case VK_SCROLL_LOCK:
- return GDK_Scroll_Lock;
- case VK_F1:
- return GDK_F1;
- case VK_F2:
- return GDK_F2;
- case VK_F3:
- return GDK_F3;
- case VK_F4:
- return GDK_F4;
- case VK_F5:
- return GDK_F5;
- case VK_F6:
- return GDK_F6;
- case VK_F7:
- return GDK_F7;
- case VK_F8:
- return GDK_F8;
- case VK_F9:
- return GDK_F9;
- case VK_F10:
- return GDK_F10;
- case VK_F11:
- return GDK_F11;
- case VK_F12:
- return GDK_F12;
- case VK_F13:
- return GDK_F13;
- case VK_F14:
- return GDK_F14;
- case VK_F15:
- return GDK_F15;
- case VK_F16:
- return GDK_F16;
- case VK_F17:
- return GDK_F17;
- case VK_F18:
- return GDK_F18;
- case VK_F19:
- return GDK_F19;
- case VK_F20:
- return GDK_F20;
- case VK_F21:
- return GDK_F21;
- case VK_F22:
- return GDK_F22;
- case VK_F23:
- return GDK_F23;
- case VK_F24:
- return GDK_F24;
- case VK_PRINTSCREEN:
- return GDK_Print;
- case VK_INSERT:
- return keyLocation == AWT_KEY_LOCATION_NUMPAD ? GDK_KP_Insert : GDK_Insert;
- case VK_HELP:
- return GDK_Help;
- case VK_META:
- return keyLocation == AWT_KEY_LOCATION_LEFT ? GDK_Meta_L : GDK_Meta_R;
- case VK_BACK_QUOTE:
- return GDK_grave;
- case VK_QUOTE:
- return GDK_apostrophe;
- case VK_KP_UP:
- return GDK_KP_Up;
- case VK_KP_DOWN:
- return GDK_KP_Down;
- case VK_KP_LEFT:
- return GDK_KP_Left;
- case VK_KP_RIGHT:
- return GDK_KP_Right;
- case VK_DEAD_GRAVE:
- return GDK_dead_grave;
- case VK_DEAD_ACUTE:
- return GDK_dead_acute;
- case VK_DEAD_CIRCUMFLEX:
- return GDK_dead_circumflex;
- case VK_DEAD_TILDE:
- return GDK_dead_tilde;
- case VK_DEAD_MACRON:
- return GDK_dead_macron;
- case VK_DEAD_BREVE:
- return GDK_dead_breve;
- case VK_DEAD_ABOVEDOT:
- return GDK_dead_abovedot;
- case VK_DEAD_DIAERESIS:
- return GDK_dead_diaeresis;
- case VK_DEAD_ABOVERING:
- return GDK_dead_abovering;
- case VK_DEAD_DOUBLEACUTE:
- return GDK_dead_doubleacute;
- case VK_DEAD_CARON:
- return GDK_dead_caron;
- case VK_DEAD_CEDILLA:
- return GDK_dead_cedilla;
- case VK_DEAD_OGONEK:
- return GDK_dead_ogonek;
- case VK_DEAD_IOTA:
- return GDK_dead_iota;
- case VK_DEAD_VOICED_SOUND:
- return GDK_dead_voiced_sound;
- case VK_DEAD_SEMIVOICED_SOUND:
- return GDK_dead_semivoiced_sound;
- case VK_AMPERSAND:
- return GDK_ampersand;
- case VK_ASTERISK:
- return GDK_asterisk;
- case VK_QUOTEDBL:
- return GDK_quotedbl;
- case VK_LESS:
- return GDK_less;
- case VK_GREATER:
- return GDK_greater;
- case VK_BRACELEFT:
- return GDK_braceleft;
- case VK_BRACERIGHT:
- return GDK_braceright;
- case VK_AT:
- return GDK_at;
- case VK_COLON:
- return GDK_colon;
- case VK_CIRCUMFLEX:
- return GDK_asciicircum;
- case VK_DOLLAR:
- return GDK_dollar;
- case VK_EURO_SIGN:
- return GDK_EuroSign;
- case VK_EXCLAMATION_MARK:
- return GDK_exclam;
- case VK_INVERTED_EXCLAMATION_MARK:
- return GDK_exclamdown;
- case VK_LEFT_PARENTHESIS:
- return GDK_parenleft;
- case VK_NUMBER_SIGN:
- return GDK_numbersign;
- case VK_PLUS:
- return GDK_plus;
- case VK_RIGHT_PARENTHESIS:
- return GDK_parenright;
- case VK_UNDERSCORE:
- return GDK_underscore;
- /*
- case VK_FINAL:
- case VK_CONVERT:
- case VK_NONCONVERT:
- case VK_ACCEPT:
- */
- case VK_MODECHANGE:
- return GDK_Mode_switch;
- /*
- case VK_KANA:
- */
- case VK_KANJI:
- return GDK_Kanji;
- /*
- case VK_ALPHANUMERIC:
- */
- case VK_KATAKANA:
- return GDK_Katakana;
- case VK_HIRAGANA:
- return GDK_Hiragana;
- /*
- case VK_FULL_WIDTH:
- case VK_HALF_WIDTH:
- case VK_ROMAN_CHARACTERS:
- case VK_ALL_CANDIDATES:
- */
- case VK_PREVIOUS_CANDIDATE:
- return GDK_PreviousCandidate;
- case VK_CODE_INPUT:
- return GDK_Codeinput;
- /*
- case VK_JAPANESE_KATAKANA:
- case VK_JAPANESE_HIRAGANA:
- case VK_JAPANESE_ROMAN:
- */
- case VK_KANA_LOCK:
- return GDK_Kana_Lock;
- /*
- case VK_INPUT_METHOD_ON_OFF:
- case VK_CUT:
- case VK_COPY:
- case VK_PASTE:
- case VK_UNDO:
- case VK_AGAIN:
- case VK_FIND:
- case VK_PROPS:
- case VK_STOP:
- case VK_COMPOSE:
- case VK_ALT_GRAPH:
- */
- default:
- return GDK_VoidSymbol;
+ case 1:
+ return AWT_BUTTON1_MASK;
+ case 2:
+ return AWT_BUTTON2_MASK;
+ case 3:
+ return AWT_BUTTON3_MASK;
}
+
+ return 0;
+}
+
+static jint
+state_to_awt_mods (guint state)
+{
+ jint result = 0;
+
+ if (state & GDK_SHIFT_MASK)
+ result |= AWT_SHIFT_DOWN_MASK;
+ if (state & GDK_CONTROL_MASK)
+ result |= AWT_CTRL_DOWN_MASK;
+ if (state & GDK_MOD1_MASK)
+ result |= AWT_ALT_DOWN_MASK;
+
+ return result;
+}
+
+static jint
+state_to_awt_mods_with_button_states (guint state)
+{
+ jint result = 0;
+
+ if (state & GDK_SHIFT_MASK)
+ result |= AWT_SHIFT_DOWN_MASK;
+ if (state & GDK_CONTROL_MASK)
+ result |= AWT_CTRL_DOWN_MASK;
+ if (state & GDK_MOD1_MASK)
+ result |= AWT_ALT_DOWN_MASK;
+ if (state & GDK_BUTTON1_MASK)
+ result |= AWT_BUTTON1_DOWN_MASK;
+ if (state & GDK_BUTTON2_MASK)
+ result |= AWT_BUTTON2_DOWN_MASK;
+ if (state & GDK_BUTTON3_MASK)
+ result |= AWT_BUTTON3_DOWN_MASK;
+
+ return result;
}
JNIEXPORT void JNICALL
@@ -619,7 +394,7 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetDispatchKeyEvent
event->key.length = 0;
event->key.string = NULL;
- lookup_keyval = awt_keycode_to_keysym (keyCode, keyLocation);
+ lookup_keyval = cp_gtk_awt_keycode_to_keysym (keyCode, keyLocation);
if (!gdk_keymap_get_entries_for_keyval (gdk_keymap_get_default (),
lookup_keyval,
@@ -827,7 +602,12 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetBackground
bg = GTK_WIDGET (ptr)->style->bg[GTK_STATE_NORMAL];
+ gdk_threads_leave ();
+
array = (*env)->NewIntArray (env, 3);
+
+ gdk_threads_enter ();
+
rgb = (*env)->GetIntArrayElements (env, array, NULL);
/* convert color data from 16 bit values down to 8 bit values */
rgb[0] = bg.red >> 8;
@@ -855,7 +635,12 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetForeground
fg = GTK_WIDGET (ptr)->style->fg[GTK_STATE_NORMAL];
+ gdk_threads_leave ();
+
array = (*env)->NewIntArray (env, 3);
+
+ gdk_threads_enter ();
+
rgb = (*env)->GetIntArrayElements (env, array, NULL);
/* convert color data from 16 bit values down to 8 bit values */
rgb[0] = fg.red >> 8;
@@ -1017,23 +802,39 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals
{
void *ptr;
jobject *gref;
+
+ gdk_threads_enter ();
+
ptr = NSA_GET_PTR (env, obj);
gref = NSA_GET_GLOBAL_REF (env, obj);
- gdk_threads_enter ();
+ cp_gtk_component_connect_signals (ptr, gref);
- /* Connect EVENT signal, which happens _before_ any specific signal. */
- g_signal_connect (GTK_OBJECT (ptr), "event",
- G_CALLBACK (pre_event_handler), *gref);
+ gdk_threads_leave ();
+}
- g_signal_connect (G_OBJECT (ptr), "focus-in-event",
- G_CALLBACK (focus_in_cb), *gref);
+JNIEXPORT void JNICALL
+Java_gnu_java_awt_peer_gtk_GtkComponentPeer_setNativeEventMask
+ (JNIEnv *env, jobject obj)
+{
+ void *ptr;
- g_signal_connect (G_OBJECT (ptr), "focus-out-event",
- G_CALLBACK (focus_out_cb), *gref);
+ gdk_threads_enter ();
- g_signal_connect_after (G_OBJECT (ptr), "realize",
- G_CALLBACK (connect_awt_hook_cb), *gref);
+ ptr = NSA_GET_PTR (env, obj);
+
+ gtk_widget_add_events (GTK_WIDGET (ptr),
+ GDK_POINTER_MOTION_MASK
+ | GDK_BUTTON_MOTION_MASK
+ | GDK_BUTTON_PRESS_MASK
+ | GDK_BUTTON_RELEASE_MASK
+ | GDK_KEY_PRESS_MASK
+ | GDK_KEY_RELEASE_MASK
+ | GDK_ENTER_NOTIFY_MASK
+ | GDK_LEAVE_NOTIFY_MASK
+ | GDK_STRUCTURE_MASK
+ | GDK_KEY_PRESS_MASK
+ | GDK_FOCUS_CHANGE_MASK);
gdk_threads_leave ();
}
@@ -1065,45 +866,26 @@ find_bg_color_widget (GtkWidget *widget)
return bg_color_widget;
}
-static gboolean
-focus_in_cb (GtkWidget *widget __attribute((unused)),
- GdkEventFocus *event __attribute((unused)),
- jobject peer)
+void
+cp_gtk_component_connect_expose_signals (GObject *ptr, jobject *gref)
{
- gdk_threads_leave ();
-
- (*gdk_env())->CallVoidMethod (gdk_env(), peer,
- postFocusEventID,
- AWT_FOCUS_GAINED,
- JNI_FALSE);
-
- gdk_threads_enter ();
-
- return FALSE;
+ g_signal_connect (G_OBJECT (ptr), "expose-event",
+ G_CALLBACK (component_expose_cb), *gref);
}
-static gboolean
-focus_out_cb (GtkWidget *widget __attribute((unused)),
- GdkEventFocus *event __attribute((unused)),
- jobject peer)
+void
+cp_gtk_component_connect_focus_signals (GObject *ptr, jobject *gref)
{
- gdk_threads_leave ();
-
- (*gdk_env())->CallVoidMethod (gdk_env(), peer,
- postFocusEventID,
- AWT_FOCUS_LOST,
- JNI_FALSE);
-
- gdk_threads_enter ();
-
- return FALSE;
+ g_signal_connect (G_OBJECT (ptr), "focus-in-event",
+ G_CALLBACK (component_focus_in_cb), *gref);
+
+ g_signal_connect (G_OBJECT (ptr), "focus-out-event",
+ G_CALLBACK (component_focus_out_cb), *gref);
}
void
-classpath_gtk_component_connect_nonfocus_signals (GObject *ptr __attribute__((unused)), jobject *gref __attribute__((unused)))
- {
- /* FIXME */
-#if 0
+cp_gtk_component_connect_mouse_signals (GObject *ptr, jobject *gref)
+{
g_signal_connect (G_OBJECT (ptr), "button-press-event",
G_CALLBACK (component_button_press_cb), *gref);
@@ -1113,28 +895,267 @@ classpath_gtk_component_connect_nonfocus_signals (GObject *ptr __attribute__((un
g_signal_connect (G_OBJECT (ptr), "enter-notify-event",
G_CALLBACK (component_enter_notify_cb), *gref);
- g_signal_connect (G_OBJECT (ptr), "expose-event",
- G_CALLBACK (component_expose_cb), *gref);
-
g_signal_connect (G_OBJECT (ptr), "leave-notify-event",
G_CALLBACK (component_leave_notify_cb), *gref);
g_signal_connect (G_OBJECT (ptr), "motion-notify-event",
G_CALLBACK (component_motion_notify_cb), *gref);
-#endif
}
void
-classpath_gtk_component_connect_signals (GObject *ptr __attribute__((unused)), jobject *gref __attribute__((unused)))
+cp_gtk_component_connect_signals (GObject *ptr, jobject *gref)
{
- /* FIXME */
-#if 0
- classpath_gtk_component_connect_nonfocus_signals (ptr, gref);
-
- g_signal_connect (G_OBJECT (ptr), "focus-in-event",
- G_CALLBACK (component_focus_in_cb), *gref);
+ cp_gtk_component_connect_expose_signals (ptr, gref);
+ cp_gtk_component_connect_focus_signals (ptr, gref);
+ cp_gtk_component_connect_mouse_signals (ptr, gref);
+}
+
+/* These variables are used to keep track of click counts. The AWT
+ allows more than a triple click to occur but GTK doesn't report
+ more-than-triple clicks. */
+static jint click_count = 1;
+static guint32 button_click_time = 0;
+static GdkWindow *button_window = NULL;
+static guint button_number = -1;
+static int hasBeenDragged;
+
+static gboolean
+component_button_press_cb (GtkWidget *widget __attribute__((unused)),
+ GdkEventButton *event,
+ jobject peer)
+{
+ /* Ignore double and triple click events. */
+ if (event->type == GDK_2BUTTON_PRESS
+ || event->type == GDK_3BUTTON_PRESS)
+ return FALSE;
+
+ if ((event->time < (button_click_time + MULTI_CLICK_TIME))
+ && (event->window == button_window)
+ && (event->button == button_number))
+ click_count++;
+ else
+ click_count = 1;
+
+ button_click_time = event->time;
+ button_window = event->window;
+ button_number = event->button;
+
+ gdk_threads_leave ();
+
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
+ postMouseEventID,
+ AWT_MOUSE_PRESSED,
+ (jlong)event->time,
+ state_to_awt_mods (event->state)
+ | button_to_awt_mods (event->button),
+ (jint)event->x,
+ (jint)event->y,
+ click_count,
+ (event->button == 3) ? JNI_TRUE :
+ JNI_FALSE);
+
+ gdk_threads_enter ();
+
+ hasBeenDragged = FALSE;
+
+ return FALSE;
+}
+
+static gboolean
+component_button_release_cb (GtkWidget *widget __attribute__((unused)),
+ GdkEventButton *event,
+ jobject peer)
+{
+ int width, height;
+
+ gdk_threads_leave ();
+
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
+ postMouseEventID,
+ AWT_MOUSE_RELEASED,
+ (jlong)event->time,
+ state_to_awt_mods (event->state)
+ | button_to_awt_mods (event->button),
+ (jint)event->x,
+ (jint)event->y,
+ click_count,
+ JNI_FALSE);
+
+ gdk_threads_enter ();
+
+ /* Generate an AWT click event only if the release occured in the
+ window it was pressed in, and the mouse has not been dragged since
+ the last time it was pressed. */
+ gdk_window_get_size (event->window, &width, &height);
+ if (! hasBeenDragged
+ && event->x >= 0
+ && event->y >= 0
+ && event->x <= width
+ && event->y <= height)
+ {
+ gdk_threads_leave ();
+
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
+ postMouseEventID,
+ AWT_MOUSE_CLICKED,
+ (jlong)event->time,
+ state_to_awt_mods (event->state)
+ | button_to_awt_mods (event->button),
+ (jint)event->x,
+ (jint)event->y,
+ click_count,
+ JNI_FALSE);
+
+ gdk_threads_enter ();
+ }
+ return FALSE;
+}
- g_signal_connect (G_OBJECT (ptr), "focus-out-event",
- G_CALLBACK (component_focus_out_cb), *gref);
-#endif
+static gboolean
+component_motion_notify_cb (GtkWidget *widget __attribute__((unused)),
+ GdkEventMotion *event,
+ jobject peer)
+{
+ if (event->state & (GDK_BUTTON1_MASK
+ | GDK_BUTTON2_MASK
+ | GDK_BUTTON3_MASK
+ | GDK_BUTTON4_MASK
+ | GDK_BUTTON5_MASK))
+ {
+ gdk_threads_leave ();
+
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
+ postMouseEventID,
+ AWT_MOUSE_DRAGGED,
+ (jlong)event->time,
+ state_to_awt_mods_with_button_states (event->state),
+ (jint)event->x,
+ (jint)event->y,
+ 0,
+ JNI_FALSE);
+
+ gdk_threads_enter ();
+
+ hasBeenDragged = TRUE;
+ }
+ else
+ {
+ gdk_threads_leave ();
+
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer, postMouseEventID,
+ AWT_MOUSE_MOVED,
+ (jlong)event->time,
+ state_to_awt_mods (event->state),
+ (jint)event->x,
+ (jint)event->y,
+ 0,
+ JNI_FALSE);
+
+ gdk_threads_enter ();
+ }
+ return FALSE;
+}
+
+static gboolean
+component_enter_notify_cb (GtkWidget *widget __attribute__((unused)),
+ GdkEventCrossing *event,
+ jobject peer)
+{
+ /* We are not interested in enter events that are due to
+ grab/ungrab and not to actually crossing boundaries */
+ if (event->mode == GDK_CROSSING_NORMAL)
+ {
+ gdk_threads_leave ();
+
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer, postMouseEventID,
+ AWT_MOUSE_ENTERED,
+ (jlong)event->time,
+ state_to_awt_mods_with_button_states (event->state),
+ (jint)event->x,
+ (jint)event->y,
+ 0,
+ JNI_FALSE);
+
+ gdk_threads_enter ();
+ }
+ return FALSE;
+}
+
+static gboolean
+component_leave_notify_cb (GtkWidget *widget __attribute__((unused)),
+ GdkEventCrossing *event,
+ jobject peer)
+{
+ /* We are not interested in leave events that are due to
+ grab/ungrab and not to actually crossing boundaries */
+ if (event->mode == GDK_CROSSING_NORMAL)
+ {
+ gdk_threads_leave ();
+
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
+ postMouseEventID,
+ AWT_MOUSE_EXITED,
+ (jlong)event->time,
+ state_to_awt_mods_with_button_states (event->state),
+ (jint)event->x,
+ (jint)event->y,
+ 0,
+ JNI_FALSE);
+
+ gdk_threads_enter ();
+ }
+ return FALSE;
+}
+
+static gboolean
+component_expose_cb (GtkWidget *widget __attribute__((unused)),
+ GdkEventExpose *event,
+ jobject peer)
+{
+ gdk_threads_leave ();
+
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
+ postExposeEventID,
+ (jint)event->area.x,
+ (jint)event->area.y,
+ (jint)event->area.width,
+ (jint)event->area.height);
+
+ gdk_threads_enter ();
+
+ return FALSE;
+}
+
+static gboolean
+component_focus_in_cb (GtkWidget *widget __attribute((unused)),
+ GdkEventFocus *event __attribute((unused)),
+ jobject peer)
+{
+ gdk_threads_leave ();
+
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
+ postFocusEventID,
+ AWT_FOCUS_GAINED,
+ JNI_FALSE);
+
+ gdk_threads_enter ();
+
+ return FALSE;
+}
+
+static gboolean
+component_focus_out_cb (GtkWidget *widget __attribute((unused)),
+ GdkEventFocus *event __attribute((unused)),
+ jobject peer)
+{
+ gdk_threads_leave ();
+
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
+ postFocusEventID,
+ AWT_FOCUS_LOST,
+ JNI_FALSE);
+
+ gdk_threads_enter ();
+
+ return FALSE;
}
diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
deleted file mode 100644
index c45c672fe..000000000
--- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
+++ /dev/null
@@ -1,1176 +0,0 @@
-/* gtkevents.c -- GDK/GTK event handlers
- Copyright (C) 1998, 1999, 2002, 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-#include "gtkpeer.h"
-#include <X11/Xlib.h>
-#include <gdk/gdkkeysyms.h>
-#include <stdarg.h>
-#include <assert.h>
-
-/* A widget can be composed of multipled windows, so we need to hook
- events on all of them. */
-struct event_hook_info
-{
- jobject *peer_obj;
- int nwindows;
- /* array of pointers to (GdkWindow *) */
- GdkWindow ***windows;
-};
-
-static jint
-button_to_awt_mods (int button)
-{
- switch (button)
- {
- case 1:
- return AWT_BUTTON1_MASK;
- case 2:
- return AWT_BUTTON2_MASK;
- case 3:
- return AWT_BUTTON3_MASK;
- }
-
- return 0;
-}
-
-static jint
-state_to_awt_mods (guint state)
-{
- jint result = 0;
-
- if (state & GDK_SHIFT_MASK)
- result |= AWT_SHIFT_DOWN_MASK;
- if (state & GDK_CONTROL_MASK)
- result |= AWT_CTRL_DOWN_MASK;
- if (state & GDK_MOD1_MASK)
- result |= AWT_ALT_DOWN_MASK;
-
- return result;
-}
-
-static jint
-state_to_awt_mods_with_button_states (guint state)
-{
- jint result = 0;
-
- if (state & GDK_SHIFT_MASK)
- result |= AWT_SHIFT_DOWN_MASK;
- if (state & GDK_CONTROL_MASK)
- result |= AWT_CTRL_DOWN_MASK;
- if (state & GDK_MOD1_MASK)
- result |= AWT_ALT_DOWN_MASK;
- if (state & GDK_BUTTON1_MASK)
- result |= AWT_BUTTON1_DOWN_MASK;
- if (state & GDK_BUTTON2_MASK)
- result |= AWT_BUTTON2_DOWN_MASK;
- if (state & GDK_BUTTON3_MASK)
- result |= AWT_BUTTON3_DOWN_MASK;
-
- return result;
-}
-
-/* Modifier key events need special treatment. In Sun's peer
- implementation, when a modifier key is pressed, the KEY_PRESSED
- event has that modifier in its modifiers list. The corresponding
- KEY_RELEASED event's modifier list does not contain the modifier.
- For example, pressing and releasing the shift key will produce a
- key press event with modifiers=Shift, and a key release event with
- no modifiers. GDK's key events behave in the exact opposite way,
- so this translation code is needed. */
-jint
-keyevent_state_to_awt_mods (GdkEvent *event)
-{
- jint result = 0;
- guint state;
-
- if (event->type == GDK_KEY_PRESS)
- {
- state = event->key.state;
-
- if (event->key.keyval == GDK_Shift_L
- || event->key.keyval == GDK_Shift_R)
- result |= AWT_SHIFT_DOWN_MASK;
- else
- {
- if (state & GDK_SHIFT_MASK)
- result |= AWT_SHIFT_DOWN_MASK;
- }
-
- if (event->key.keyval == GDK_Control_L
- || event->key.keyval == GDK_Control_R)
- result |= AWT_CTRL_DOWN_MASK;
- else
- {
- if (state & GDK_CONTROL_MASK)
- result |= AWT_CTRL_DOWN_MASK;
- }
-
- if (event->key.keyval == GDK_Alt_L
- || event->key.keyval == GDK_Alt_R)
- result |= AWT_ALT_DOWN_MASK;
- else
- {
- if (state & GDK_MOD1_MASK)
- result |= AWT_ALT_DOWN_MASK;
- }
- }
- else if (event->type == GDK_KEY_RELEASE)
- {
- state = event->key.state;
-
- if (event->key.keyval != GDK_Shift_L
- && event->key.keyval != GDK_Shift_R)
- {
- if (state & GDK_SHIFT_MASK)
- result |= AWT_SHIFT_DOWN_MASK;
- }
- if (event->key.keyval != GDK_Control_L
- && event->key.keyval != GDK_Control_R)
- {
- if (state & GDK_CONTROL_MASK)
- result |= AWT_CTRL_DOWN_MASK;
- }
-
- if (event->key.keyval != GDK_Alt_L
- && event->key.keyval != GDK_Alt_R)
- {
- if (state & GDK_MOD1_MASK)
- result |= AWT_ALT_DOWN_MASK;
- }
- }
-
- return result;
-}
-
-/* Get the first keyval in the keymap for this event's keycode. The
- first keyval corresponds roughly to Java's notion of a virtual
- key. Returns the uppercase version of the first keyval. */
-static guint
-get_first_keyval_from_keymap (GdkEvent *event)
-{
- guint keyval;
- guint *keyvals;
- gint n_entries;
-
- if (!gdk_keymap_get_entries_for_keycode (NULL,
- event->key.hardware_keycode,
- NULL,
- &keyvals,
- &n_entries))
- {
- g_warning ("No keyval found for hardware keycode %d\n",
- event->key.hardware_keycode);
- /* Try to recover by using the keyval in the event structure. */
- keyvals = &(event->key.keyval);
- }
- keyval = keyvals[0];
- g_free (keyvals);
-
- return gdk_keyval_to_upper (keyval);
-}
-
-#ifdef __GNUC__
-__inline
-#endif
-static jint
-keysym_to_awt_keycode (GdkEvent *event)
-{
- guint ukeyval;
- guint state;
-
- ukeyval = get_first_keyval_from_keymap (event);
- state = event->key.state;
-
- /* VK_A through VK_Z */
- if (ukeyval >= GDK_A && ukeyval <= GDK_Z)
- return ukeyval;
-
- /* VK_0 through VK_9 */
- if (ukeyval >= GDK_0 && ukeyval <= GDK_9)
- return ukeyval;
-
- switch (ukeyval)
- {
- case GDK_Return:
- case GDK_KP_Enter:
- return VK_ENTER;
- case GDK_BackSpace:
- return VK_BACK_SPACE;
- case GDK_Tab:
- return VK_TAB;
- case GDK_Cancel:
- return VK_CANCEL;
- case GDK_Clear:
- return VK_CLEAR;
- case GDK_Shift_L:
- case GDK_Shift_R:
- return VK_SHIFT;
- case GDK_Control_L:
- case GDK_Control_R:
- return VK_CONTROL;
- case GDK_Alt_L:
- case GDK_Alt_R:
- return VK_ALT;
- case GDK_Pause:
- return VK_PAUSE;
- case GDK_Caps_Lock:
- return VK_CAPS_LOCK;
- case GDK_Escape:
- return VK_ESCAPE;
- case GDK_space:
- return VK_SPACE;
- case GDK_KP_Page_Up:
- /* For keys on the numeric keypad, the JVM produces one of two
- virtual keys, depending on the num lock state. */
- if (state & GDK_MOD2_MASK)
- return VK_NUMPAD9;
- else
- return VK_PAGE_UP;
- case GDK_Page_Up:
- return VK_PAGE_UP;
- case GDK_KP_Page_Down:
- if (state & GDK_MOD2_MASK)
- return VK_NUMPAD3;
- else
- return VK_PAGE_DOWN;
- case GDK_Page_Down:
- return VK_PAGE_DOWN;
- case GDK_KP_End:
- if (state & GDK_MOD2_MASK)
- return VK_NUMPAD1;
- else
- return VK_END;
- case GDK_End:
- return VK_END;
- case GDK_KP_Home:
- if (state & GDK_MOD2_MASK)
- return VK_NUMPAD7;
- else
- return VK_HOME;
- case GDK_Home:
- return VK_HOME;
- case GDK_KP_Begin:
- if (state & GDK_MOD2_MASK)
- return VK_NUMPAD5;
- else
- return VK_UNDEFINED;
- case GDK_Left:
- return VK_LEFT;
- case GDK_Up:
- return VK_UP;
- case GDK_Right:
- return VK_RIGHT;
- case GDK_Down:
- return VK_DOWN;
- case GDK_comma:
- return VK_COMMA;
- case GDK_minus:
- return VK_MINUS;
- case GDK_period:
- return VK_PERIOD;
- case GDK_slash:
- return VK_SLASH;
- /*
- return VK_0;
- return VK_1;
- return VK_2;
- return VK_3;
- return VK_4;
- return VK_5;
- return VK_6;
- return VK_7;
- return VK_8;
- return VK_9;
- */
- case GDK_semicolon:
- return VK_SEMICOLON;
- case GDK_equal:
- return VK_EQUALS;
- /*
- return VK_A;
- return VK_B;
- return VK_C;
- return VK_D;
- return VK_E;
- return VK_F;
- return VK_G;
- return VK_H;
- return VK_I;
- return VK_J;
- return VK_K;
- return VK_L;
- return VK_M;
- return VK_N;
- return VK_O;
- return VK_P;
- return VK_Q;
- return VK_R;
- return VK_S;
- return VK_T;
- return VK_U;
- return VK_V;
- return VK_W;
- return VK_X;
- return VK_Y;
- return VK_Z;
- */
- case GDK_bracketleft:
- return VK_OPEN_BRACKET;
- case GDK_backslash:
- return VK_BACK_SLASH;
- case GDK_bracketright:
- return VK_CLOSE_BRACKET;
- case GDK_KP_0:
- return VK_NUMPAD0;
- case GDK_KP_1:
- return VK_NUMPAD1;
- case GDK_KP_2:
- return VK_NUMPAD2;
- case GDK_KP_3:
- return VK_NUMPAD3;
- case GDK_KP_4:
- return VK_NUMPAD4;
- case GDK_KP_5:
- return VK_NUMPAD5;
- case GDK_KP_6:
- return VK_NUMPAD6;
- case GDK_KP_7:
- return VK_NUMPAD7;
- case GDK_KP_8:
- return VK_NUMPAD8;
- case GDK_KP_9:
- return VK_NUMPAD9;
- case GDK_KP_Multiply:
- return VK_MULTIPLY;
- case GDK_KP_Add:
- return VK_ADD;
- /*
- return VK_SEPARATER;
- */
- case GDK_KP_Separator:
- return VK_SEPARATOR;
- case GDK_KP_Subtract:
- return VK_SUBTRACT;
- case GDK_KP_Decimal:
- return VK_DECIMAL;
- case GDK_KP_Divide:
- return VK_DIVIDE;
- case GDK_KP_Delete:
- if (state & GDK_MOD2_MASK)
- return VK_DECIMAL;
- else
- return VK_DELETE;
- case GDK_Delete:
- return VK_DELETE;
- case GDK_Num_Lock:
- return VK_NUM_LOCK;
- case GDK_Scroll_Lock:
- return VK_SCROLL_LOCK;
- case GDK_F1:
- return VK_F1;
- case GDK_F2:
- return VK_F2;
- case GDK_F3:
- return VK_F3;
- case GDK_F4:
- return VK_F4;
- case GDK_F5:
- return VK_F5;
- case GDK_F6:
- return VK_F6;
- case GDK_F7:
- return VK_F7;
- case GDK_F8:
- return VK_F8;
- case GDK_F9:
- return VK_F9;
- case GDK_F10:
- return VK_F10;
- case GDK_F11:
- return VK_F11;
- case GDK_F12:
- return VK_F12;
- case GDK_F13:
- return VK_F13;
- case GDK_F14:
- return VK_F14;
- case GDK_F15:
- return VK_F15;
- case GDK_F16:
- return VK_F16;
- case GDK_F17:
- return VK_F17;
- case GDK_F18:
- return VK_F18;
- case GDK_F19:
- return VK_F19;
- case GDK_F20:
- return VK_F20;
- case GDK_F21:
- return VK_F21;
- case GDK_F22:
- return VK_F22;
- case GDK_F23:
- return VK_F23;
- case GDK_F24:
- return VK_F24;
- case GDK_Print:
- return VK_PRINTSCREEN;
- case GDK_KP_Insert:
- if (state & GDK_MOD2_MASK)
- return VK_NUMPAD0;
- else
- return VK_INSERT;
- case GDK_Insert:
- return VK_INSERT;
- case GDK_Help:
- return VK_HELP;
- case GDK_Meta_L:
- case GDK_Meta_R:
- return VK_META;
- case GDK_grave:
- return VK_BACK_QUOTE;
- case GDK_apostrophe:
- return VK_QUOTE;
- case GDK_KP_Up:
- if (state & GDK_MOD2_MASK)
- return VK_NUMPAD8;
- else
- return VK_KP_UP;
- case GDK_KP_Down:
- if (state & GDK_MOD2_MASK)
- return VK_NUMPAD2;
- else
- return VK_KP_DOWN;
- case GDK_KP_Left:
- if (state & GDK_MOD2_MASK)
- return VK_NUMPAD4;
- else
- return VK_KP_LEFT;
- case GDK_KP_Right:
- if (state & GDK_MOD2_MASK)
- return VK_NUMPAD6;
- else
- return VK_KP_RIGHT;
- case GDK_dead_grave:
- return VK_DEAD_GRAVE;
- case GDK_dead_acute:
- return VK_DEAD_ACUTE;
- case GDK_dead_circumflex:
- return VK_DEAD_CIRCUMFLEX;
- case GDK_dead_tilde:
- return VK_DEAD_TILDE;
- case GDK_dead_macron:
- return VK_DEAD_MACRON;
- case GDK_dead_breve:
- return VK_DEAD_BREVE;
- case GDK_dead_abovedot:
- return VK_DEAD_ABOVEDOT;
- case GDK_dead_diaeresis:
- return VK_DEAD_DIAERESIS;
- case GDK_dead_abovering:
- return VK_DEAD_ABOVERING;
- case GDK_dead_doubleacute:
- return VK_DEAD_DOUBLEACUTE;
- case GDK_dead_caron:
- return VK_DEAD_CARON;
- case GDK_dead_cedilla:
- return VK_DEAD_CEDILLA;
- case GDK_dead_ogonek:
- return VK_DEAD_OGONEK;
- case GDK_dead_iota:
- return VK_DEAD_IOTA;
- case GDK_dead_voiced_sound:
- return VK_DEAD_VOICED_SOUND;
- case GDK_dead_semivoiced_sound:
- return VK_DEAD_SEMIVOICED_SOUND;
- case GDK_ampersand:
- return VK_AMPERSAND;
- case GDK_asterisk:
- return VK_ASTERISK;
- case GDK_quotedbl:
- return VK_QUOTEDBL;
- case GDK_less:
- return VK_LESS;
- case GDK_greater:
- return VK_GREATER;
- case GDK_braceleft:
- return VK_BRACELEFT;
- case GDK_braceright:
- return VK_BRACERIGHT;
- case GDK_at:
- return VK_AT;
- case GDK_colon:
- return VK_COLON;
- case GDK_asciicircum:
- return VK_CIRCUMFLEX;
- case GDK_dollar:
- return VK_DOLLAR;
- case GDK_EuroSign:
- return VK_EURO_SIGN;
- case GDK_exclam:
- return VK_EXCLAMATION_MARK;
- case GDK_exclamdown:
- return VK_INVERTED_EXCLAMATION_MARK;
- case GDK_parenleft:
- return VK_LEFT_PARENTHESIS;
- case GDK_numbersign:
- return VK_NUMBER_SIGN;
- case GDK_plus:
- return VK_PLUS;
- case GDK_parenright:
- return VK_RIGHT_PARENTHESIS;
- case GDK_underscore:
- return VK_UNDERSCORE;
- /*
- return VK_FINAL;
- return VK_CONVERT;
- return VK_NONCONVERT;
- return VK_ACCEPT;
- */
- case GDK_Mode_switch:
- return VK_MODECHANGE;
- /*
- return VK_KANA;
- */
- case GDK_Kanji:
- return VK_KANJI;
- /*
- return VK_ALPHANUMERIC;
- */
- case GDK_Katakana:
- return VK_KATAKANA;
- case GDK_Hiragana:
- return VK_HIRAGANA;
- /*
- return VK_FULL_WIDTH;
- return VK_HALF_WIDTH;
- return VK_ROMAN_CHARACTERS;
- return VK_ALL_CANDIDATES;
- */
- case GDK_PreviousCandidate:
- return VK_PREVIOUS_CANDIDATE;
- case GDK_Codeinput:
- return VK_CODE_INPUT;
- /*
- return VK_JAPANESE_KATAKANA;
- return VK_JAPANESE_HIRAGANA;
- return VK_JAPANESE_ROMAN;
- */
- case GDK_Kana_Lock:
- return VK_KANA_LOCK;
- /*
- return VK_INPUT_METHOD_ON_OFF;
- return VK_CUT;
- return VK_COPY;
- return VK_PASTE;
- return VK_UNDO;
- return VK_AGAIN;
- return VK_FIND;
- return VK_PROPS;
- return VK_STOP;
- return VK_COMPOSE;
- return VK_ALT_GRAPH;
- */
- default:
- return VK_UNDEFINED;
- }
-}
-
-static jint
-keysym_to_awt_keylocation (GdkEvent *event)
-{
- guint ukeyval;
-
- ukeyval = get_first_keyval_from_keymap (event);
-
- /* VK_A through VK_Z */
- if (ukeyval >= GDK_A && ukeyval <= GDK_Z)
- return AWT_KEY_LOCATION_STANDARD;
-
- /* VK_0 through VK_9 */
- if (ukeyval >= GDK_0 && ukeyval <= GDK_9)
- return AWT_KEY_LOCATION_STANDARD;
-
- switch (ukeyval)
- {
- case GDK_Shift_L:
- case GDK_Control_L:
- case GDK_Alt_L:
- case GDK_Meta_L:
- return AWT_KEY_LOCATION_LEFT;
-
- case GDK_Shift_R:
- case GDK_Control_R:
- case GDK_Alt_R:
- case GDK_Meta_R:
- return AWT_KEY_LOCATION_RIGHT;
-
- case GDK_Return:
- case GDK_BackSpace:
- case GDK_Tab:
- case GDK_Cancel:
- case GDK_Clear:
- case GDK_Pause:
- case GDK_Caps_Lock:
- case GDK_Escape:
- case GDK_space:
- case GDK_Page_Up:
- case GDK_Page_Down:
- case GDK_End:
- case GDK_Home:
- case GDK_Left:
- case GDK_Up:
- case GDK_Right:
- case GDK_Down:
- case GDK_comma:
- case GDK_minus:
- case GDK_period:
- case GDK_slash:
- case GDK_semicolon:
- case GDK_equal:
- case GDK_bracketleft:
- case GDK_backslash:
- case GDK_bracketright:
- case GDK_Delete:
- case GDK_Scroll_Lock:
- case GDK_F1:
- case GDK_F2:
- case GDK_F3:
- case GDK_F4:
- case GDK_F5:
- case GDK_F6:
- case GDK_F7:
- case GDK_F8:
- case GDK_F9:
- case GDK_F10:
- case GDK_F11:
- case GDK_F12:
- case GDK_F13:
- case GDK_F14:
- case GDK_F15:
- case GDK_F16:
- case GDK_F17:
- case GDK_F18:
- case GDK_F19:
- case GDK_F20:
- case GDK_F21:
- case GDK_F22:
- case GDK_F23:
- case GDK_F24:
- case GDK_Print:
- case GDK_Insert:
- case GDK_Help:
- case GDK_grave:
- case GDK_apostrophe:
- case GDK_dead_grave:
- case GDK_dead_acute:
- case GDK_dead_circumflex:
- case GDK_dead_tilde:
- case GDK_dead_macron:
- case GDK_dead_breve:
- case GDK_dead_abovedot:
- case GDK_dead_diaeresis:
- case GDK_dead_abovering:
- case GDK_dead_doubleacute:
- case GDK_dead_caron:
- case GDK_dead_cedilla:
- case GDK_dead_ogonek:
- case GDK_dead_iota:
- case GDK_dead_voiced_sound:
- case GDK_dead_semivoiced_sound:
- case GDK_ampersand:
- case GDK_asterisk:
- case GDK_quotedbl:
- case GDK_less:
- case GDK_greater:
- case GDK_braceleft:
- case GDK_braceright:
- case GDK_at:
- case GDK_colon:
- case GDK_asciicircum:
- case GDK_dollar:
- case GDK_EuroSign:
- case GDK_exclam:
- case GDK_exclamdown:
- case GDK_parenleft:
- case GDK_numbersign:
- case GDK_plus:
- case GDK_parenright:
- case GDK_underscore:
- case GDK_Mode_switch:
- case GDK_Kanji:
- case GDK_Katakana:
- case GDK_Hiragana:
- case GDK_PreviousCandidate:
- case GDK_Codeinput:
- case GDK_Kana_Lock:
- return AWT_KEY_LOCATION_STANDARD;
-
- case GDK_KP_Enter:
- case GDK_KP_Page_Up:
- case GDK_KP_Page_Down:
- case GDK_KP_End:
- case GDK_KP_Home:
- case GDK_KP_Begin:
- case GDK_KP_0:
- case GDK_KP_1:
- case GDK_KP_2:
- case GDK_KP_3:
- case GDK_KP_4:
- case GDK_KP_5:
- case GDK_KP_6:
- case GDK_KP_7:
- case GDK_KP_8:
- case GDK_KP_9:
- case GDK_KP_Multiply:
- case GDK_KP_Add:
- case GDK_KP_Separator:
- case GDK_KP_Subtract:
- case GDK_KP_Decimal:
- case GDK_KP_Divide:
- case GDK_KP_Delete:
- case GDK_Num_Lock:
- case GDK_KP_Insert:
- case GDK_KP_Up:
- case GDK_KP_Down:
- case GDK_KP_Left:
- case GDK_KP_Right:
- return AWT_KEY_LOCATION_NUMPAD;
-
- default:
- return AWT_KEY_LOCATION_UNKNOWN;
- }
-}
-
-static jchar
-keyevent_to_awt_keychar (GdkEvent *event)
-{
- if (event->key.length > 0)
- {
- /* Translate GDK carriage return to Java linefeed. */
- if (event->key.string[0] == 13)
- return VK_ENTER;
- else
- return event->key.string[0];
- }
- else
- {
- switch (event->key.keyval)
- {
- case GDK_BackSpace:
- return VK_BACK_SPACE;
- case GDK_Tab:
- return VK_TAB;
- case GDK_Delete:
- case GDK_KP_Delete:
- return VK_DELETE;
- default:
- return AWT_KEY_CHAR_UNDEFINED;
- }
- }
-}
-
-void
-awt_event_handler (GdkEvent *event)
-{
- /* keep synthetic AWT events from being processed recursively */
- if (event->type & SYNTHETIC_EVENT_MASK && event->type != GDK_NOTHING)
- {
- event->type ^= SYNTHETIC_EVENT_MASK;
- }
-
- gtk_main_do_event (event);
-}
-
-gboolean
-pre_event_handler (GtkWidget *widget, GdkEvent *event, jobject peer)
-{
- GtkWidget *event_widget;
- static guint32 button_click_time = 0;
- static GdkWindow *button_window = NULL;
- static guint button_number = -1;
- static jint click_count = 1;
- static int hasBeenDragged;
- union widget_union w;
-
- /* If it is not a focus change event, the widget must be realized already.
- If not, ignore the event (Gtk+ will do the same). */
- if (!(event->type == GDK_FOCUS_CHANGE || GTK_WIDGET_REALIZED(widget)))
- return FALSE;
-
- /* Do not handle propagated events. AWT has its own propagation rules */
- w.widget = &event_widget;
- gdk_window_get_user_data (event->any.window, w.void_widget);
- if (event_widget != widget)
- return FALSE;
-
- /* We only care about input events */
- if (!(event->type == GDK_BUTTON_PRESS
- || event->type == GDK_BUTTON_RELEASE
- || event->type == GDK_ENTER_NOTIFY
- || event->type == GDK_LEAVE_NOTIFY
- || event->type == GDK_CONFIGURE
- || event->type == GDK_EXPOSE
- || event->type == GDK_KEY_PRESS
- || event->type == GDK_KEY_RELEASE
- || event->type == GDK_FOCUS_CHANGE
- || event->type == GDK_MOTION_NOTIFY))
- {
- return FALSE;
- }
- /* g_print("event %u widget %s peer %p\n",
- event->type, gtk_widget_get_name (widget), peer); */
-
- /* If it has no jobject associated we can send no AWT event */
- if (!peer)
- return FALSE;
-
- /* for all input events, which have a window with a jobject attached,
- send the AWT input event corresponding to the Gtk event off to Java */
-
- /* keep track of clickCount ourselves, since the AWT allows more
- than a triple click to occur */
- if (event->type == GDK_BUTTON_PRESS)
- {
- if ((event->button.time < (button_click_time + MULTI_CLICK_TIME))
- && (event->button.window == button_window)
- && (event->button.button == button_number))
- click_count++;
- else
- click_count = 1;
-
- button_click_time = event->button.time;
- button_window = event->button.window;
- button_number = event->button.button;
- }
-
- switch (event->type)
- {
- case GDK_BUTTON_PRESS:
- gdk_threads_leave ();
- (*gdk_env())->CallVoidMethod (gdk_env(), peer,
- postMouseEventID,
- AWT_MOUSE_PRESSED,
- (jlong)event->button.time,
- state_to_awt_mods (event->button.state)
- | button_to_awt_mods (event->button.button),
- (jint)event->button.x,
- (jint)event->button.y,
- click_count,
- (event->button.button == 3) ? JNI_TRUE :
- JNI_FALSE);
- gdk_threads_enter ();
- hasBeenDragged = FALSE;
- break;
- case GDK_BUTTON_RELEASE:
- {
- int width, height;
-
- gdk_threads_leave ();
- (*gdk_env())->CallVoidMethod (gdk_env(), peer,
- postMouseEventID,
- AWT_MOUSE_RELEASED,
- (jlong)event->button.time,
- state_to_awt_mods (event->button.state)
- | button_to_awt_mods (event->button.button),
- (jint)event->button.x,
- (jint)event->button.y,
- click_count,
- JNI_FALSE);
- gdk_threads_enter ();
-
- /* Generate an AWT click event only if the release occured in the
- window it was pressed in, and the mouse has not been dragged since
- the last time it was pressed. */
- gdk_window_get_size (event->any.window, &width, &height);
- if (! hasBeenDragged
- && event->button.x >= 0
- && event->button.y >= 0
- && event->button.x <= width
- && event->button.y <= height)
- {
- gdk_threads_leave ();
- (*gdk_env())->CallVoidMethod (gdk_env(), peer,
- postMouseEventID,
- AWT_MOUSE_CLICKED,
- (jlong)event->button.time,
- state_to_awt_mods (event->button.state)
- | button_to_awt_mods (event->button.button),
- (jint)event->button.x,
- (jint)event->button.y,
- click_count,
- JNI_FALSE);
- gdk_threads_enter ();
- }
- }
- break;
- case GDK_MOTION_NOTIFY:
- if (event->motion.state & (GDK_BUTTON1_MASK
- | GDK_BUTTON2_MASK
- | GDK_BUTTON3_MASK
- | GDK_BUTTON4_MASK
- | GDK_BUTTON5_MASK))
- {
- gdk_threads_leave ();
- (*gdk_env())->CallVoidMethod (gdk_env(), peer,
- postMouseEventID,
- AWT_MOUSE_DRAGGED,
- (jlong)event->motion.time,
- state_to_awt_mods_with_button_states (event->motion.state),
- (jint)event->motion.x,
- (jint)event->motion.y,
- 0,
- JNI_FALSE);
- gdk_threads_enter ();
- hasBeenDragged = TRUE;
- }
- else
- {
- gdk_threads_leave ();
- (*gdk_env())->CallVoidMethod (gdk_env(), peer, postMouseEventID,
- AWT_MOUSE_MOVED,
- (jlong)event->motion.time,
- state_to_awt_mods (event->motion.state),
- (jint)event->motion.x,
- (jint)event->motion.y,
- 0,
- JNI_FALSE);
- gdk_threads_enter ();
- }
-
- break;
- case GDK_ENTER_NOTIFY:
- /* We are not interested in enter events that are due to
- grab/ungrab and not to actually crossing boundaries */
- if (event->crossing.mode == GDK_CROSSING_NORMAL)
- {
- gdk_threads_leave ();
- (*gdk_env())->CallVoidMethod (gdk_env(), peer, postMouseEventID,
- AWT_MOUSE_ENTERED,
- (jlong)event->crossing.time,
- state_to_awt_mods_with_button_states (event->crossing.state),
- (jint)event->crossing.x,
- (jint)event->crossing.y,
- 0,
- JNI_FALSE);
- gdk_threads_enter ();
- }
- break;
- case GDK_LEAVE_NOTIFY:
- /* We are not interested in leave events that are due to
- grab/ungrab and not to actually crossing boundaries */
- if (event->crossing.mode == GDK_CROSSING_NORMAL)
- {
- gdk_threads_leave ();
- (*gdk_env())->CallVoidMethod (gdk_env(), peer,
- postMouseEventID,
- AWT_MOUSE_EXITED,
- (jlong)event->crossing.time,
- state_to_awt_mods_with_button_states (event->crossing.state),
- (jint)event->crossing.x,
- (jint)event->crossing.y,
- 0,
- JNI_FALSE);
- gdk_threads_enter ();
- }
- break;
- case GDK_CONFIGURE:
- {
- /* Only send configure events to visible top-level windows. */
- if (widget && GTK_WIDGET_TOPLEVEL (widget)
- && GTK_WIDGET_VISIBLE (widget))
- {
- /* Configure events are not posted to the AWT event
- queue, and as such, the gdk/gtk peer functions will
- be called back before postConfigureEvent
- returns. */
- gdk_threads_leave ();
-
- (*gdk_env())->CallVoidMethod (gdk_env(), peer,
- postConfigureEventID,
- (jint) event->configure.x,
- (jint) event->configure.y,
- (jint) event->configure.width,
- (jint) event->configure.height);
- gdk_threads_enter ();
- }
- }
- break;
- case GDK_EXPOSE:
- gdk_threads_leave ();
- (*gdk_env())->CallVoidMethod (gdk_env(), peer,
- postExposeEventID,
- (jint)event->expose.area.x,
- (jint)event->expose.area.y,
- (jint)event->expose.area.width,
- (jint)event->expose.area.height);
- gdk_threads_enter ();
- break;
-
- case GDK_FOCUS_CHANGE:
- gdk_threads_leave ();
- (*gdk_env())->CallVoidMethod (gdk_env(), peer,
- postFocusEventID,
- (jint) (event->focus_change.in) ?
- AWT_FOCUS_GAINED : AWT_FOCUS_LOST,
- JNI_FALSE);
- gdk_threads_enter ();
- break;
- case GDK_KEY_PRESS:
- if (GTK_IS_WINDOW (widget))
- {
- /* GdkEventKey *keyevent = (GdkEventKey *) event; */
- /* g_printerr ("key press event: sent: %d time: %d state: %d keyval: %d length: %d string: %s hardware_keycode: %d group: %d\n", keyevent->send_event, keyevent->time, keyevent->state, keyevent->keyval, keyevent->length, keyevent->string, keyevent->hardware_keycode, keyevent->group); */
-
- gdk_threads_leave ();
- (*gdk_env())->CallVoidMethod (gdk_env(), peer,
- postKeyEventID,
- (jint) AWT_KEY_PRESSED,
- (jlong) event->key.time,
- keyevent_state_to_awt_mods (event),
- keysym_to_awt_keycode (event),
- keyevent_to_awt_keychar (event),
- keysym_to_awt_keylocation (event));
- gdk_threads_enter ();
- /* FIXME: generation of key typed events needs to be moved
- to GtkComponentPeer.postKeyEvent. If the key in a key
- press event is not an "action" key
- (KeyEvent.isActionKey) and is not a modifier key, then
- it should generate a key typed event. */
- return TRUE;
- }
- else
- return FALSE;
- break;
- case GDK_KEY_RELEASE:
- if (GTK_IS_WINDOW (widget))
- {
- gdk_threads_leave ();
- (*gdk_env())->CallVoidMethod (gdk_env(), peer,
- postKeyEventID,
- (jint) AWT_KEY_RELEASED,
- (jlong) event->key.time,
- keyevent_state_to_awt_mods (event),
- keysym_to_awt_keycode (event),
- keyevent_to_awt_keychar (event),
- keysym_to_awt_keylocation (event));
- gdk_threads_enter ();
- return TRUE;
- }
- else
- return FALSE;
- break;
- default:
- break;
- }
-
- return FALSE;
-}
-
-static void
-attach_jobject (GdkWindow *window, jobject *obj)
-{
- GdkAtom addr_atom = gdk_atom_intern ("_GNU_GTKAWT_ADDR", FALSE);
- GdkAtom type_atom = gdk_atom_intern ("CARDINAL", FALSE);
-
- gdk_window_set_events (window,
- gdk_window_get_events (window)
- | GDK_POINTER_MOTION_MASK
- | GDK_BUTTON_MOTION_MASK
- | GDK_BUTTON_PRESS_MASK
- | GDK_BUTTON_RELEASE_MASK
- | GDK_KEY_PRESS_MASK
- | GDK_KEY_RELEASE_MASK
- | GDK_ENTER_NOTIFY_MASK
- | GDK_LEAVE_NOTIFY_MASK
- | GDK_STRUCTURE_MASK
- | GDK_KEY_PRESS_MASK
- | GDK_FOCUS_CHANGE_MASK);
-
- gdk_property_change (window,
- addr_atom,
- type_atom,
- 8,
- GDK_PROP_MODE_REPLACE,
- (guchar *)obj,
- sizeof (jobject));
-}
-
-void
-connect_awt_hook (JNIEnv *env, jobject peer_obj, int nwindows, ...)
-{
- va_list ap;
- jobject *obj;
-
- obj = NSA_GET_GLOBAL_REF (env, peer_obj);
- g_assert (obj);
-
- va_start (ap, nwindows);
- {
- int i;
- for (i = 0; i < nwindows; i++)
- {
- GdkWindow* attach = (va_arg (ap, GdkWindow *));
- attach_jobject(attach, obj);
- }
- }
- va_end (ap);
-}
-
-/*
- * Attach a Java object that is backed by widget. This callback is
- * called after the widget's window has been realized. That way, we
- * can be sure that widget->window is non-NULL, and so can have data
- * connected to it.
- */
-void connect_awt_hook_cb (GtkWidget *widget __attribute__((unused)),
- jobject peer)
-{
- void *ptr;
-
- ptr = NSA_GET_PTR (gdk_env(), peer);
-
- connect_awt_hook (gdk_env(), peer, 1, GTK_WIDGET (ptr)->window);
-
- gdk_threads_leave ();
-
- (*gdk_env())->CallVoidMethod (gdk_env(), peer, setCursorID);
-
- gdk_threads_enter ();
-}
diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
index d5400b318..48478d3b9 100644
--- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
+++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
@@ -79,7 +79,7 @@ Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_create
/* We must add this window to the group so input in the others are
disable while it is being shown */
- gtk_window_group_add_window (global_gtk_window_group,
+ gtk_window_group_add_window (cp_gtk_global_window_group,
GTK_WINDOW (widget));
NSA_SET_PTR (env, obj, widget);
@@ -100,11 +100,11 @@ Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_connectSignals
gref = NSA_GET_GLOBAL_REF (env, obj);
/* FileDialog signals */
- g_signal_connect (G_OBJECT (ptr), "response",
- GTK_SIGNAL_FUNC (handle_response_cb), *gref);
+ g_signal_connect (G_OBJECT (ptr), "response",
+ G_CALLBACK (handle_response_cb), *gref);
/* Component signals */
- classpath_gtk_component_connect_signals (G_OBJECT (ptr), gref);
+ cp_gtk_component_connect_signals (G_OBJECT (ptr), gref);
gdk_threads_leave ();
}
@@ -140,15 +140,15 @@ static gboolean filenameFilterCallback (const GtkFileFilterInfo *filter_info,
jstring *filename;
gboolean accepted;
- cx = (*gdk_env())->GetObjectClass (gdk_env(), (jobject) obj);
- id = (*gdk_env())->GetMethodID (gdk_env(), cx, "filenameFilterCallback",
+ cx = (*cp_gtk_gdk_env())->GetObjectClass (cp_gtk_gdk_env(), (jobject) obj);
+ id = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), cx, "filenameFilterCallback",
"(Ljava/lang/String;)Z");
- filename = (*gdk_env())->NewStringUTF(gdk_env(), filter_info->filename);
+ filename = (*cp_gtk_gdk_env())->NewStringUTF(cp_gtk_gdk_env(), filter_info->filename);
gdk_threads_leave();
- accepted = (*gdk_env())->CallBooleanMethod(gdk_env(), obj, id, filename);
+ accepted = (*cp_gtk_gdk_env())->CallBooleanMethod(cp_gtk_gdk_env(), obj, id, filename);
gdk_threads_enter();
@@ -236,20 +236,20 @@ handle_response_cb (GtkDialog *dialog __attribute__((unused)),
&& responseId != GTK_RESPONSE_CANCEL)
return;
- ptr = NSA_GET_PTR (gdk_env(), peer_obj);
+ ptr = NSA_GET_PTR (cp_gtk_gdk_env(), peer_obj);
if (responseId == GTK_RESPONSE_DELETE_EVENT)
{
if (!isDisposeIDSet)
{
- jclass cx = (*gdk_env())->GetObjectClass (gdk_env(), peer_obj);
- disposeID = (*gdk_env())->GetMethodID (gdk_env(), cx, "gtkDisposeFileDialog", "()V");
+ jclass cx = (*cp_gtk_gdk_env())->GetObjectClass (cp_gtk_gdk_env(), peer_obj);
+ disposeID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), cx, "gtkDisposeFileDialog", "()V");
isDisposeIDSet = 1;
}
/* We can dispose of the dialog now (and unblock show) */
gdk_threads_leave ();
- (*gdk_env())->CallVoidMethod (gdk_env(), peer_obj, disposeID);
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer_obj, disposeID);
gdk_threads_enter ();
return;
@@ -257,24 +257,24 @@ handle_response_cb (GtkDialog *dialog __attribute__((unused)),
if (responseId == GTK_RESPONSE_ACCEPT) {
fileName = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (GTK_WIDGET (ptr)));
- str_fileName = (*gdk_env())->NewStringUTF (gdk_env(), fileName);
+ str_fileName = (*cp_gtk_gdk_env())->NewStringUTF (cp_gtk_gdk_env(), fileName);
}
if (!isIDSet)
{
- jclass cx = (*gdk_env())->GetObjectClass (gdk_env(), peer_obj);
- hideID = (*gdk_env())->GetMethodID (gdk_env(), cx, "gtkHideFileDialog", "()V");
- gtkSetFilenameID = (*gdk_env())->GetMethodID (gdk_env(), cx,
+ jclass cx = (*cp_gtk_gdk_env())->GetObjectClass (cp_gtk_gdk_env(), peer_obj);
+ hideID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), cx, "gtkHideFileDialog", "()V");
+ gtkSetFilenameID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), cx,
"gtkSetFilename", "(Ljava/lang/String;)V");
isIDSet = 1;
}
/* Set the Java object field 'file' with this value. */
gdk_threads_leave ();
- (*gdk_env())->CallVoidMethod (gdk_env(), peer_obj, gtkSetFilenameID, str_fileName);
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer_obj, gtkSetFilenameID, str_fileName);
/* We can hide the dialog now (and unblock show) */
- (*gdk_env())->CallVoidMethod (gdk_env(), peer_obj, hideID);
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer_obj, hideID);
gdk_threads_enter ();
}
diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c
index 9fb43a57b..41dfcea67 100644
--- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c
+++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c
@@ -38,10 +38,6 @@
#include "gtkpeer.h"
#include "gnu_java_awt_peer_gtk_GtkFramePeer.h"
-/* lives in GtkImage.c */
-GdkPixbuf *gnu_java_awt_peer_gtk_GtkImage_getPixbuf(JNIEnv *env, jobject obj);
-jboolean gnu_java_awt_peer_gtk_GtkImage_isOffScreen(JNIEnv *env, jobject obj);
-
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkFramePeer_removeMenuBarPeer
(JNIEnv *env, jobject obj)
@@ -168,7 +164,7 @@ Java_gnu_java_awt_peer_gtk_GtkFramePeer_nativeSetIconImage
gdk_threads_enter ();
- pixbuf = gnu_java_awt_peer_gtk_GtkImage_getPixbuf(env, gtkimage);
+ pixbuf = cp_gtk_image_get_pixbuf (env, gtkimage);
g_assert (pixbuf != NULL);
ptr = NSA_GET_PTR (env, obj);
@@ -177,7 +173,7 @@ Java_gnu_java_awt_peer_gtk_GtkFramePeer_nativeSetIconImage
/* if the GtkImage is offscreen, this is a temporary pixbuf which should
be thrown out. */
- if(gnu_java_awt_peer_gtk_GtkImage_isOffScreen(env, gtkimage) == JNI_TRUE)
+ if(cp_gtk_image_is_offscreen (env, gtkimage) == JNI_TRUE)
gdk_pixbuf_unref (pixbuf);
gdk_threads_leave ();
diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c
index 9a3ab9364..0fae1da42 100644
--- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c
+++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c
@@ -82,7 +82,8 @@ Java_gnu_java_awt_peer_gtk_GtkGenericPeer_gtkWidgetModifyFont
font_name = (*env)->GetStringUTFChars (env, name, NULL);
font_desc = pango_font_description_from_string (font_name);
- pango_font_description_set_size (font_desc, size * dpi_conversion_factor);
+ pango_font_description_set_size (font_desc,
+ size * cp_gtk_dpi_conversion_factor);
if (style & AWT_STYLE_BOLD)
pango_font_description_set_weight (font_desc, PANGO_WEIGHT_BOLD);
diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c
index e6c1dbe15..86cad1487 100644
--- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c
+++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c
@@ -71,7 +71,10 @@ Java_gnu_java_awt_peer_gtk_GtkImage_loadPixbuf
filename = (*env)->GetStringUTFChars (env, name, 0);
if (filename == NULL)
- return JNI_FALSE;
+ {
+ gdk_threads_leave ();
+ return JNI_FALSE;
+ }
pixbuf = gdk_pixbuf_new_from_file (filename, NULL);
if (pixbuf == NULL)
@@ -108,18 +111,26 @@ Java_gnu_java_awt_peer_gtk_GtkImage_getPixels(JNIEnv *env, jobject obj)
gdk_threads_enter ();
- pixbuf = gnu_java_awt_peer_gtk_GtkImage_getPixbuf(env, obj);
+ pixbuf = cp_gtk_image_get_pixbuf (env, obj);
width = gdk_pixbuf_get_width (pixbuf);
height = gdk_pixbuf_get_height (pixbuf);
rowstride = gdk_pixbuf_get_rowstride (pixbuf);
+ /* Must release the GDK lock before allocating memory through the
+ JVM, since some JVMs use the same lock for allocations and
+ finalization. Deadlock can occur on those JVMs. */
+ gdk_threads_leave ();
+
result_array = (*env)->NewIntArray (env, (width * height));
+
+ gdk_threads_enter ();
+
dst = result_array_iter =
(*env)->GetIntArrayElements (env, result_array, NULL);
+
pixeldata = gdk_pixbuf_get_pixels (pixbuf);
- /* FIXME: handle more bit depths here? */
g_assert (gdk_pixbuf_get_bits_per_sample (pixbuf) == 8);
if (gdk_pixbuf_get_has_alpha (pixbuf))
@@ -266,7 +277,7 @@ Java_gnu_java_awt_peer_gtk_GtkImage_createScaledPixmap(JNIEnv *env,
g_assert (field != 0);
height = (*env)->GetIntField (env, destination, field);
- pixbuf = gnu_java_awt_peer_gtk_GtkImage_getPixbuf(env, source);
+ pixbuf = cp_gtk_image_get_pixbuf (env, source);
dst = gdk_pixbuf_scale_simple(pixbuf,
width, height,
@@ -457,7 +468,7 @@ Java_gnu_java_awt_peer_gtk_GtkImage_drawPixelsScaledFlipped
/**
* Used by GtkFramePeer
*/
-GdkPixbuf *gnu_java_awt_peer_gtk_GtkImage_getPixbuf(JNIEnv *env, jobject obj)
+GdkPixbuf *cp_gtk_image_get_pixbuf (JNIEnv *env, jobject obj)
{
int width, height;
GdkPixbuf *pixbuf;
@@ -491,14 +502,14 @@ GdkPixbuf *gnu_java_awt_peer_gtk_GtkImage_getPixbuf(JNIEnv *env, jobject obj)
/**
* Used by GdkGraphics
*/
-GdkPixmap *gnu_java_awt_peer_gtk_GtkImage_getPixmap(JNIEnv *env, jobject obj)
+GdkPixmap *cp_gtk_image_get_pixmap (JNIEnv *env, jobject obj)
{
if (offScreen (env, obj) == JNI_FALSE)
return NULL;
return (GdkPixmap *)getData (env, obj);
}
-jboolean gnu_java_awt_peer_gtk_GtkImage_isOffScreen(JNIEnv *env, jobject obj)
+jboolean cp_gtk_image_is_offscreen (JNIEnv *env, jobject obj)
{
return offScreen(env, obj);
}
diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c
index fc785d87d..7968ca773 100644
--- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c
+++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c
@@ -84,10 +84,14 @@ Java_gnu_java_awt_peer_gtk_GtkLabelPeer_gtkWidgetModifyFont
label = gtk_bin_get_child (GTK_BIN (ptr));
if (!label)
- return;
+ {
+ gdk_threads_leave ();
+ return;
+ }
font_desc = pango_font_description_from_string (font_name);
- pango_font_description_set_size (font_desc, size * dpi_conversion_factor);
+ pango_font_description_set_size (font_desc,
+ size * cp_gtk_dpi_conversion_factor);
if (style & AWT_STYLE_BOLD)
pango_font_description_set_weight (font_desc, PANGO_WEIGHT_BOLD);
diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c
index c864d1283..d513176be 100644
--- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c
+++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c
@@ -38,6 +38,21 @@
#include "gtkpeer.h"
#include "gnu_java_awt_peer_gtk_GtkListPeer.h"
+static jmethodID postListItemEventID;
+
+void
+cp_gtk_list_init_jni (void)
+{
+ jclass gtklistpeer;
+
+ gtklistpeer = (*cp_gtk_gdk_env())->FindClass (cp_gtk_gdk_env(),
+ "gnu/java/awt/peer/gtk/GtkListPeer");
+
+ postListItemEventID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), gtklistpeer,
+ "postItemEvent",
+ "(II)V");
+}
+
enum
{
COLUMN_STRING,
@@ -133,7 +148,7 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_connectSignals
gtk_tree_selection_set_select_function (selection, item_highlighted_cb,
*gref, NULL);
- classpath_gtk_component_connect_signals (G_OBJECT (list), gref);
+ cp_gtk_component_connect_signals (G_OBJECT (list), gref);
gdk_threads_leave ();
}
@@ -156,7 +171,8 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_gtkWidgetModifyFont
font_name = (*env)->GetStringUTFChars (env, name, NULL);
font_desc = pango_font_description_from_string (font_name);
- pango_font_description_set_size (font_desc, size * dpi_conversion_factor);
+ pango_font_description_set_size (font_desc,
+ size * cp_gtk_dpi_conversion_factor);
if (style & AWT_STYLE_BOLD)
pango_font_description_set_weight (font_desc, PANGO_WEIGHT_BOLD);
@@ -407,7 +423,12 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_getSelectedIndexes
{
current_row = rows = gtk_tree_selection_get_selected_rows (selection, NULL);
+ gdk_threads_leave ();
+
result_array = (*env)->NewIntArray (env, count);
+
+ gdk_threads_enter ();
+
result_array_iter = (*env)->GetIntArrayElements (env, result_array, NULL);
for (i = 0; i < count; i++)
@@ -493,19 +514,23 @@ item_highlighted_cb (GtkTreeSelection *selection __attribute__((unused)),
if (!path_currently_selected)
{
gdk_threads_leave ();
- (*gdk_env())->CallVoidMethod (gdk_env(), peer,
+
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
postListItemEventID,
row,
(jint) AWT_ITEM_SELECTED);
+
gdk_threads_enter ();
}
else
{
gdk_threads_leave ();
- (*gdk_env())->CallVoidMethod (gdk_env(), peer,
+
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
postListItemEventID,
row,
(jint) AWT_ITEM_DESELECTED);
+
gdk_threads_enter ();
}
}
diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c
index 5bd4ba0a1..2746f1e4a 100644
--- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c
+++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c
@@ -40,6 +40,22 @@ exception statement from your version. */
#include "gnu_java_awt_peer_gtk_GtkMenuItemPeer.h"
#include "gnu_java_awt_peer_gtk_GtkComponentPeer.h"
+static jmethodID postMenuActionEventID;
+
+void
+cp_gtk_menuitem_init_jni (void)
+{
+ jclass gtkmenuitempeer;
+
+ gtkmenuitempeer = (*cp_gtk_gdk_env())->FindClass (cp_gtk_gdk_env(),
+ "gnu/java/awt/peer/gtk/GtkMenuItemPeer");
+
+ postMenuActionEventID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(),
+ gtkmenuitempeer,
+ "postMenuActionEvent",
+ "()V");
+}
+
static void item_activate_cb (GtkMenuItem *item __attribute__((unused)),
jobject peer_obj);
@@ -109,7 +125,8 @@ Java_gnu_java_awt_peer_gtk_GtkMenuItemPeer_gtkWidgetModifyFont
if (label)
{
font_desc = pango_font_description_from_string (font_name);
- pango_font_description_set_size (font_desc, size * dpi_conversion_factor);
+ pango_font_description_set_size (font_desc,
+ size * cp_gtk_dpi_conversion_factor);
if (style & AWT_STYLE_BOLD)
pango_font_description_set_weight (font_desc, PANGO_WEIGHT_BOLD);
@@ -170,7 +187,7 @@ static void
item_activate_cb (GtkMenuItem *item __attribute__((unused)), jobject peer_obj)
{
gdk_threads_leave ();
- (*gdk_env())->CallVoidMethod (gdk_env(), peer_obj,
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer_obj,
postMenuActionEventID);
gdk_threads_enter ();
}
diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c
index e86acfc1d..16018f001 100644
--- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c
+++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c
@@ -95,7 +95,7 @@ Java_gnu_java_awt_peer_gtk_GtkMenuPeer_create
toplevel = gtk_widget_get_toplevel (menu);
if (GTK_IS_WINDOW (toplevel))
{
- gtk_window_group_add_window (global_gtk_window_group,
+ gtk_window_group_add_window (cp_gtk_global_window_group,
GTK_WINDOW(toplevel));
}
diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c
index 934dde1ed..8a130e1a4 100644
--- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c
+++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c
@@ -88,7 +88,9 @@ Java_gnu_java_awt_peer_gtk_GtkPanelPeer_connectSignals
g_signal_connect (G_OBJECT (ptr), "focus-out-event",
G_CALLBACK (panel_focus_out_cb), *gref);
- classpath_gtk_component_connect_nonfocus_signals (G_OBJECT (ptr), gref);
+ /* Component signals. Exclude focus signals. */
+ cp_gtk_component_connect_expose_signals (ptr, gref);
+ cp_gtk_component_connect_mouse_signals (ptr, gref);
gdk_threads_leave ();
}
@@ -108,4 +110,3 @@ panel_focus_out_cb (GtkWidget * widget __attribute__((unused)),
{
return TRUE;
}
-
diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c
index 6ecfb8166..1445cec55 100644
--- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c
+++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c
@@ -39,6 +39,10 @@ exception statement from your version. */
#include "gtkpeer.h"
#include "gnu_java_awt_peer_gtk_GtkScrollPanePeer.h"
+#define AWT_SCROLLPANE_SCROLLBARS_AS_NEEDED 0
+#define AWT_SCROLLPANE_SCROLLBARS_ALWAYS 1
+#define AWT_SCROLLPANE_SCROLLBARS_NEVER 2
+
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkScrollPanePeer_create
(JNIEnv *env, jobject obj, int width, int height)
diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollbarPeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollbarPeer.c
index 4ca048502..396862710 100644
--- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollbarPeer.c
+++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollbarPeer.c
@@ -41,14 +41,36 @@ exception statement from your version. */
#include "gnu_java_awt_peer_gtk_GtkComponentPeer.h"
#include "gnu_java_awt_peer_gtk_GtkScrollbarPeer.h"
+#define AWT_ADJUSTMENT_UNIT_INCREMENT 1
+#define AWT_ADJUSTMENT_UNIT_DECREMENT 2
+#define AWT_ADJUSTMENT_BLOCK_DECREMENT 3
+#define AWT_ADJUSTMENT_BLOCK_INCREMENT 4
+#define AWT_ADJUSTMENT_TRACK 5
+
+static jmethodID postAdjustmentEventID;
+
+void
+cp_gtk_scrollbar_init_jni (void)
+{
+ jclass gtkscrollbarpeer;
+
+ gtkscrollbarpeer = (*cp_gtk_gdk_env())->FindClass (cp_gtk_gdk_env(),
+ "gnu/java/awt/peer/gtk/GtkScrollbarPeer");
+
+ postAdjustmentEventID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(),
+ gtkscrollbarpeer,
+ "postAdjustmentEvent",
+ "(II)V");
+}
+
#if GTK_MINOR_VERSION > 4
static gboolean slider_moved_cb (GtkRange *range,
GtkScrollType scroll,
gdouble value,
jobject obj);
#else
-static void post_change_event (GtkRange *range,
- jobject peer);
+static void post_change_event_cb (GtkRange *range,
+ jobject peer);
#endif
JNIEXPORT void JNICALL
@@ -97,18 +119,19 @@ Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_connectSignals
gdk_threads_enter ();
+ /* Scrollbar signals */
#if GTK_MINOR_VERSION > 4
g_signal_connect (G_OBJECT (ptr), "change-value",
- GTK_SIGNAL_FUNC (slider_moved_cb), *gref);
+ G_CALLBACK (slider_moved_cb), *gref);
#else
g_signal_connect (G_OBJECT (ptr), "value-changed",
- G_CALLBACK (post_change_event), *gref);
+ G_CALLBACK (post_change_event_cb), *gref);
#endif
- gdk_threads_leave ();
+ /* Component signals */
+ cp_gtk_component_connect_signals (G_OBJECT (ptr), gref);
- /* Connect the superclass signals. */
- Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals (env, obj);
+ gdk_threads_leave ();
}
JNIEXPORT void JNICALL
@@ -195,28 +218,28 @@ slider_moved_cb (GtkRange *range,
switch (scroll)
{
case GTK_SCROLL_STEP_BACKWARD:
- (*gdk_env())->CallVoidMethod (gdk_env(), obj, postAdjustmentEventID,
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), obj, postAdjustmentEventID,
AWT_ADJUSTMENT_UNIT_DECREMENT,
(jint) value);
break;
case GTK_SCROLL_STEP_FORWARD:
- (*gdk_env())->CallVoidMethod (gdk_env(), obj, postAdjustmentEventID,
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), obj, postAdjustmentEventID,
AWT_ADJUSTMENT_UNIT_INCREMENT,
(jint) value);
break;
case GTK_SCROLL_PAGE_BACKWARD:
- (*gdk_env())->CallVoidMethod (gdk_env(), obj, postAdjustmentEventID,
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), obj, postAdjustmentEventID,
AWT_ADJUSTMENT_BLOCK_DECREMENT,
(jint) value);
break;
case GTK_SCROLL_PAGE_FORWARD:
- (*gdk_env())->CallVoidMethod (gdk_env(), obj, postAdjustmentEventID,
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), obj, postAdjustmentEventID,
AWT_ADJUSTMENT_BLOCK_INCREMENT,
(jint) value);
break;
default:
/* GTK_SCROLL_JUMP: */
- (*gdk_env())->CallVoidMethod (gdk_env(), obj, postAdjustmentEventID,
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), obj, postAdjustmentEventID,
AWT_ADJUSTMENT_TRACK,
(jint) value);
break;
@@ -225,11 +248,11 @@ slider_moved_cb (GtkRange *range,
}
#else
static void
-post_change_event (GtkRange *range, jobject peer)
+post_change_event_cb (GtkRange *range, jobject peer)
{
GtkAdjustment *adj;
adj = gtk_range_get_adjustment (range);
- (*gdk_env())->CallVoidMethod (gdk_env(), peer, postAdjustmentEventID,
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer, postAdjustmentEventID,
AWT_ADJUSTMENT_TRACK, (jint) adj->value);
}
#endif
diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
index 4e34a367d..9af88a026 100644
--- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
+++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
@@ -39,6 +39,10 @@ exception statement from your version. */
#include "gtkpeer.h"
#include "gnu_java_awt_peer_gtk_GtkTextAreaPeer.h"
+#define AWT_TEXTAREA_SCROLLBARS_BOTH 0
+#define AWT_TEXTAREA_SCROLLBARS_VERTICAL_ONLY 1
+#define AWT_TEXTAREA_SCROLLBARS_HORIZONTAL_ONLY 2
+
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_create
(JNIEnv *env, jobject obj,
@@ -100,10 +104,10 @@ Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_connectSignals
buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
/* TextComponent signals */
- classpath_gtk_textcomponent_connect_signals (G_OBJECT (buf), gref);
+ cp_gtk_textcomponent_connect_signals (G_OBJECT (buf), gref);
/* Component signals */
- classpath_gtk_component_connect_signals (G_OBJECT (text), gref);
+ cp_gtk_component_connect_signals (G_OBJECT (text), gref);
gdk_threads_leave ();
}
@@ -186,7 +190,7 @@ Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_gtkWidgetModifyFont
font_desc = pango_font_description_from_string (font_name);
pango_font_description_set_size (font_desc,
- size * dpi_conversion_factor);
+ size * cp_gtk_dpi_conversion_factor);
if (style & AWT_STYLE_BOLD)
pango_font_description_set_weight (font_desc, PANGO_WEIGHT_BOLD);
diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c
index 810bcd10c..eb658339d 100644
--- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c
+++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c
@@ -45,15 +45,17 @@ exception statement from your version. */
#define BB_GREEN 26985
#define BB_BLUE 31611
+static jmethodID postTextEventID;
+
void
-classpath_gtk_textcomponent_init_jni (void)
+cp_gtk_textcomponent_init_jni (void)
{
jclass gtkcomponentpeer;
- gtkcomponentpeer = (*gdk_env())->FindClass (gdk_env(),
+ gtkcomponentpeer = (*cp_gtk_gdk_env())->FindClass (cp_gtk_gdk_env(),
"gnu/java/awt/peer/gtk/GtkComponentPeer");
- postTextEventID = (*gdk_env())->GetMethodID (gdk_env(), gtkcomponentpeer,
+ postTextEventID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), gtkcomponentpeer,
"postTextEvent",
"()V");
}
@@ -95,10 +97,10 @@ Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_connectSignals
gref = NSA_GET_GLOBAL_REF (env, obj);
/* TextComponent signals */
- classpath_gtk_textcomponent_connect_signals (G_OBJECT (ptr), gref);
+ cp_gtk_textcomponent_connect_signals (G_OBJECT (ptr), gref);
/* Component signals */
- classpath_gtk_component_connect_signals (G_OBJECT (ptr), gref);
+ cp_gtk_component_connect_signals (G_OBJECT (ptr), gref);
gdk_threads_leave ();
}
@@ -238,7 +240,7 @@ Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_gtkWidgetModifyFont
font_desc = pango_font_description_from_string (font_name);
pango_font_description_set_size (font_desc,
- size * dpi_conversion_factor);
+ size * cp_gtk_dpi_conversion_factor);
if (style & AWT_STYLE_BOLD)
pango_font_description_set_weight (font_desc, PANGO_WEIGHT_BOLD);
@@ -405,7 +407,7 @@ Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_setText
}
void
-classpath_gtk_textcomponent_connect_signals (GObject *ptr, jobject *gref)
+cp_gtk_textcomponent_connect_signals (GObject *ptr, jobject *gref)
{
g_signal_connect (G_OBJECT(ptr), "changed",
G_CALLBACK (textcomponent_changed_cb), *gref);
@@ -416,6 +418,6 @@ textcomponent_changed_cb (GtkEditable *editable __attribute__((unused)),
jobject peer)
{
gdk_threads_leave ();
- (*gdk_env())->CallVoidMethod (gdk_env(), peer, postTextEventID);
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer, postTextEventID);
gdk_threads_enter ();
}
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 605e9d52e..a8e1957ee 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
@@ -43,40 +43,43 @@ exception statement from your version. */
#include <sys/time.h>
-#ifdef JVM_SUN
- struct state_table *native_state_table;
- struct state_table *native_global_ref_table;
-#endif
-
-jmethodID setBoundsCallbackID;
-
-jmethodID postActionEventID;
-jmethodID postMenuActionEventID;
-jmethodID postMouseEventID;
-jmethodID postConfigureEventID;
-jmethodID postExposeEventID;
-jmethodID postKeyEventID;
-jmethodID postFocusEventID;
-jmethodID postAdjustmentEventID;
-jmethodID postItemEventID;
-jmethodID choicePostItemEventID;
-jmethodID postListItemEventID;
-jmethodID postTextEventID;
-jmethodID postWindowEventID;
-jmethodID postInsetsChangedEventID;
-jmethodID windowGetWidthID;
-jmethodID windowGetHeightID;
-
-jmethodID beginNativeRepaintID;
-jmethodID endNativeRepaintID;
-
-jmethodID initComponentGraphicsID;
-#ifdef GTK_CAIRO
-jmethodID initComponentGraphics2DID;
-#endif
-jmethodID setCursorID;
-
-JavaVM *java_vm;
+#define RC_FILE ".classpath-gtkrc"
+
+/* From java.awt.SystemColor */
+#define AWT_DESKTOP 0
+#define AWT_ACTIVE_CAPTION 1
+#define AWT_ACTIVE_CAPTION_TEXT 2
+#define AWT_ACTIVE_CAPTION_BORDER 3
+#define AWT_INACTIVE_CAPTION 4
+#define AWT_INACTIVE_CAPTION_TEXT 5
+#define AWT_INACTIVE_CAPTION_BORDER 6
+#define AWT_WINDOW 7
+#define AWT_WINDOW_BORDER 8
+#define AWT_WINDOW_TEXT 9
+#define AWT_MENU 10
+#define AWT_MENU_TEXT 11
+#define AWT_TEXT 12
+#define AWT_TEXT_TEXT 13
+#define AWT_TEXT_HIGHLIGHT 14
+#define AWT_TEXT_HIGHLIGHT_TEXT 15
+#define AWT_TEXT_INACTIVE_TEXT 16
+#define AWT_CONTROL 17
+#define AWT_CONTROL_TEXT 18
+#define AWT_CONTROL_HIGHLIGHT 19
+#define AWT_CONTROL_LT_HIGHLIGHT 20
+#define AWT_CONTROL_SHADOW 21
+#define AWT_CONTROL_DK_SHADOW 22
+#define AWT_SCROLLBAR 23
+#define AWT_INFO 24
+#define AWT_INFO_TEXT 25
+#define AWT_NUM_COLORS 26
+
+struct state_table *cp_gtk_native_state_table;
+struct state_table *cp_gtk_native_global_ref_table;
+
+static jclass gtkgenericpeer;
+static JavaVM *java_vm;
+static jmethodID printCurrentThreadID;
union env_union
{
@@ -85,7 +88,7 @@ union env_union
};
JNIEnv *
-gdk_env()
+cp_gtk_gdk_env()
{
union env_union tmp;
g_assert((*java_vm)->GetEnv(java_vm, &tmp.void_env, JNI_VERSION_1_2) == JNI_OK);
@@ -93,12 +96,11 @@ gdk_env()
}
-GtkWindowGroup *global_gtk_window_group;
+GtkWindowGroup *cp_gtk_global_window_group;
+double cp_gtk_dpi_conversion_factor;
static void init_glib_threads(JNIEnv *, jint);
-double dpi_conversion_factor;
-
static void init_dpi_conversion_factor (void);
static void dpi_changed_cb (GtkSettings *settings,
GParamSpec *pspec);
@@ -132,29 +134,20 @@ Java_gnu_java_awt_peer_gtk_GtkToolkit_gtkInit (JNIEnv *env,
char **argv;
char *homedir, *rcpath = NULL;
- jclass gtkgenericpeer, gtkcomponentpeer, gtkchoicepeer, gtkwindowpeer, gtkscrollbarpeer, gtklistpeer,
- gtkmenuitempeer, window, gdkgraphics;
-#ifdef GTK_CAIRO
- jclass gdkgraphics2d;
-#endif
-
gtkgenericpeer = (*env)->FindClass(env, "gnu/java/awt/peer/gtk/GtkGenericPeer");
+ printCurrentThreadID = (*env)->GetStaticMethodID (env, gtkgenericpeer,
+ "printCurrentThread", "()V");
+
NSA_INIT (env, gtkgenericpeer);
g_assert((*env)->GetJavaVM(env, &java_vm) == 0);
/* GTK requires a program's argc and argv variables, and requires that they
- be valid. Set it up. */
+ be valid. Set it up. */
argv = (char **) g_malloc (sizeof (char *) * 2);
argv[0] = (char *) g_malloc(1);
-#if 1
- strcpy(argv[0], "");
-#else /* The following is a more efficient alternative, but less intuitively
- * expresses what we are trying to do. This code is only run once, so
- * I'm going for intuitive. */
argv[0][0] = '\0';
-#endif
argv[1] = NULL;
init_glib_threads(env, portableNativeSync);
@@ -172,8 +165,6 @@ Java_gnu_java_awt_peer_gtk_GtkToolkit_gtkInit (JNIEnv *env,
we're shutting down. */
atexit (gdk_threads_enter);
- gdk_event_handler_set ((GdkEventFunc)awt_event_handler, NULL, NULL);
-
if ((homedir = getenv ("HOME")))
{
rcpath = (char *) g_malloc (strlen (homedir) + strlen (RC_FILE) + 2);
@@ -191,87 +182,21 @@ Java_gnu_java_awt_peer_gtk_GtkToolkit_gtkInit (JNIEnv *env,
old_glog_func = g_log_set_default_handler (&glog_func, NULL);
#endif
- /* setup cached IDs for posting GTK events to Java */
-
- window = (*env)->FindClass (env, "java/awt/Window");
-
- gtkcomponentpeer = (*env)->FindClass (env,
- "gnu/java/awt/peer/gtk/GtkComponentPeer");
- gtkchoicepeer = (*env)->FindClass (env,
- "gnu/java/awt/peer/gtk/GtkChoicePeer");
- gtkwindowpeer = (*env)->FindClass (env,
- "gnu/java/awt/peer/gtk/GtkWindowPeer");
- gtkscrollbarpeer = (*env)->FindClass (env,
- "gnu/java/awt/peer/gtk/GtkScrollbarPeer");
- gtklistpeer = (*env)->FindClass (env, "gnu/java/awt/peer/gtk/GtkListPeer");
- gtkmenuitempeer = (*env)->FindClass (env,
- "gnu/java/awt/peer/gtk/GtkMenuItemPeer");
- gdkgraphics = (*env)->FindClass (env,
- "gnu/java/awt/peer/gtk/GdkGraphics");
-#ifdef GTK_CAIRO
- gdkgraphics2d = (*env)->FindClass (env,
- "gnu/java/awt/peer/gtk/GdkGraphics2D");
+#if GTK_CAIRO
+ cp_gtk_graphics2d_init_jni ();
#endif
- setBoundsCallbackID = (*env)->GetMethodID (env, window,
- "setBoundsCallback",
- "(IIII)V");
-
- postMenuActionEventID = (*env)->GetMethodID (env, gtkmenuitempeer,
- "postMenuActionEvent",
- "()V");
- postMouseEventID = (*env)->GetMethodID (env, gtkcomponentpeer,
- "postMouseEvent", "(IJIIIIZ)V");
- setCursorID = (*env)->GetMethodID (env, gtkcomponentpeer,
- "setCursor", "()V");
- beginNativeRepaintID = (*env)->GetMethodID (env, gtkcomponentpeer,
- "beginNativeRepaint", "()V");
-
- endNativeRepaintID = (*env)->GetMethodID (env, gtkcomponentpeer,
- "endNativeRepaint", "()V");
-
- postConfigureEventID = (*env)->GetMethodID (env, gtkwindowpeer,
- "postConfigureEvent", "(IIII)V");
- postWindowEventID = (*env)->GetMethodID (env, gtkwindowpeer,
- "postWindowEvent",
- "(ILjava/awt/Window;I)V");
- postInsetsChangedEventID = (*env)->GetMethodID (env, gtkwindowpeer,
- "postInsetsChangedEvent",
- "(IIII)V");
- windowGetWidthID = (*env)->GetMethodID (env, gtkwindowpeer,
- "getWidth", "()I");
- windowGetHeightID = (*env)->GetMethodID (env, gtkwindowpeer,
- "getHeight", "()I");
-
- postExposeEventID = (*env)->GetMethodID (env, gtkcomponentpeer,
- "postExposeEvent", "(IIII)V");
- postKeyEventID = (*env)->GetMethodID (env, gtkcomponentpeer,
- "postKeyEvent", "(IJIICI)V");
- postFocusEventID = (*env)->GetMethodID (env, gtkcomponentpeer,
- "postFocusEvent", "(IZ)V");
- postAdjustmentEventID = (*env)->GetMethodID (env, gtkscrollbarpeer,
- "postAdjustmentEvent",
- "(II)V");
- postItemEventID = (*env)->GetMethodID (env, gtkcomponentpeer,
- "postItemEvent",
- "(Ljava/lang/Object;I)V");
- choicePostItemEventID = (*env)->GetMethodID (env, gtkchoicepeer,
- "choicePostItemEvent",
- "(Ljava/lang/String;I)V");
- postListItemEventID = (*env)->GetMethodID (env, gtklistpeer,
- "postItemEvent",
- "(II)V");
- postTextEventID = (*env)->GetMethodID (env, gtkcomponentpeer,
- "postTextEvent",
- "()V");
- initComponentGraphicsID = (*env)->GetMethodID (env, gdkgraphics,
- "initComponentGraphics",
- "()V");
-#ifdef GTK_CAIRO
- initComponentGraphics2DID = (*env)->GetMethodID (env, gdkgraphics2d,
- "initComponentGraphics2D",
- "()V");
-#endif
- global_gtk_window_group = gtk_window_group_new ();
+ cp_gtk_graphics_init_jni ();
+ cp_gtk_button_init_jni ();
+ cp_gtk_checkbox_init_jni ();
+ cp_gtk_choice_init_jni ();
+ cp_gtk_component_init_jni ();
+ cp_gtk_list_init_jni ();
+ cp_gtk_menuitem_init_jni ();
+ cp_gtk_scrollbar_init_jni ();
+ cp_gtk_textcomponent_init_jni ();
+ cp_gtk_window_init_jni ();
+
+ cp_gtk_global_window_group = gtk_window_group_new ();
init_dpi_conversion_factor ();
}
@@ -295,11 +220,11 @@ init_glib_threads(JNIEnv *env, jint portableNativeSync)
#endif
}
- (*env)->GetJavaVM( env, &the_vm );
+ (*env)->GetJavaVM( env, &cp_gtk_the_vm );
if (!g_thread_supported ())
{
if (portableNativeSync)
- g_thread_init ( &portable_native_sync_jni_functions );
+ g_thread_init ( &cp_gtk_portable_native_sync_jni_functions );
else
g_thread_init ( NULL );
}
@@ -317,6 +242,11 @@ init_glib_threads(JNIEnv *env, jint portableNativeSync)
/* printf("called gthread init\n"); */
}
+void
+cp_gtk_print_current_thread (void)
+{
+ (*cp_gtk_gdk_env())->CallStaticVoidMethod (cp_gtk_gdk_env(), gtkgenericpeer, printCurrentThreadID);
+}
/* This is a big hack, needed until this pango bug is resolved:
http://bugzilla.gnome.org/show_bug.cgi?id=119081.
@@ -336,16 +266,17 @@ init_dpi_conversion_factor ()
/* If int_dpi == -1 gtk-xft-dpi returns the default value. So we
have to do approximate calculation here. */
if (int_dpi < 0)
- dpi_conversion_factor = PANGO_SCALE * 72.0 / 96.;
+ cp_gtk_dpi_conversion_factor = PANGO_SCALE * 72.0 / 96.;
else
- dpi_conversion_factor = PANGO_SCALE * 72.0 / (int_dpi / PANGO_SCALE);
+ cp_gtk_dpi_conversion_factor =
+ PANGO_SCALE * 72.0 / (int_dpi / PANGO_SCALE);
g_signal_connect (settings, "notify::gtk-xft-dpi",
G_CALLBACK (dpi_changed_cb), NULL);
}
else
/* Approximate. */
- dpi_conversion_factor = PANGO_SCALE * 72.0 / 96.;
+ cp_gtk_dpi_conversion_factor = PANGO_SCALE * 72.0 / 96.;
}
static void
@@ -355,9 +286,10 @@ dpi_changed_cb (GtkSettings *settings,
int int_dpi;
g_object_get (settings, "gtk-xft-dpi", &int_dpi, NULL);
if (int_dpi < 0)
- dpi_conversion_factor = PANGO_SCALE * 72.0 / 96.;
+ cp_gtk_dpi_conversion_factor = PANGO_SCALE * 72.0 / 96.;
else
- dpi_conversion_factor = PANGO_SCALE * 72.0 / (int_dpi / PANGO_SCALE);
+ cp_gtk_dpi_conversion_factor =
+ PANGO_SCALE * 72.0 / (int_dpi / PANGO_SCALE);
}
static int
@@ -386,7 +318,7 @@ glog_func (const gchar *log_domain,
| G_LOG_LEVEL_CRITICAL
| G_LOG_LEVEL_WARNING))
{
- JNIEnv *env = gdk_env ();
+ JNIEnv *env = cp_gtk_gdk_env ();
jthrowable *exc = (*env)->ExceptionOccurred(env);
gchar *detail = g_strconcat (log_domain, ": ", message, NULL);
JCL_ThrowException (env, "java/lang/InternalError", detail);
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 d5681f585..650d9b603 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
@@ -41,6 +41,971 @@ exception statement from your version. */
#include <gdk/gdkprivate.h>
#include <gdk/gdkx.h>
#include <X11/Xatom.h>
+#include <gdk/gdkkeysyms.h>
+
+#define AWT_WINDOW_OPENED 200
+#define AWT_WINDOW_CLOSING 201
+#define AWT_WINDOW_CLOSED 202
+#define AWT_WINDOW_ICONIFIED 203
+#define AWT_WINDOW_DEICONIFIED 204
+#define AWT_WINDOW_ACTIVATED 205
+#define AWT_WINDOW_DEACTIVATED 206
+#define AWT_WINDOW_GAINED_FOCUS 207
+#define AWT_WINDOW_LOST_FOCUS 208
+#define AWT_WINDOW_STATE_CHANGED 209
+
+/* Virtual Keys */
+/* This list should be kept in the same order as the VK_ field
+ declarations in KeyEvent.java. */
+#define VK_ENTER '\n'
+#define VK_BACK_SPACE '\b'
+#define VK_TAB '\t'
+#define VK_CANCEL 3
+#define VK_CLEAR 12
+#define VK_SHIFT 16
+#define VK_CONTROL 17
+#define VK_ALT 18
+#define VK_PAUSE 19
+#define VK_CAPS_LOCK 20
+#define VK_ESCAPE 27
+#define VK_SPACE ' '
+#define VK_PAGE_UP 33
+#define VK_PAGE_DOWN 34
+#define VK_END 35
+#define VK_HOME 36
+#define VK_LEFT 37
+#define VK_UP 38
+#define VK_RIGHT 39
+#define VK_DOWN 40
+#define VK_COMMA ','
+#define VK_MINUS '-'
+#define VK_PERIOD '.'
+#define VK_SLASH '/'
+#define VK_0 '0'
+#define VK_1 '1'
+#define VK_2 '2'
+#define VK_3 '3'
+#define VK_4 '4'
+#define VK_5 '5'
+#define VK_6 '6'
+#define VK_7 '7'
+#define VK_8 '8'
+#define VK_9 '9'
+#define VK_SEMICOLON ';'
+#define VK_EQUALS '='
+#define VK_A 'A'
+#define VK_B 'B'
+#define VK_C 'C'
+#define VK_D 'D'
+#define VK_E 'E'
+#define VK_F 'F'
+#define VK_G 'G'
+#define VK_H 'H'
+#define VK_I 'I'
+#define VK_J 'J'
+#define VK_K 'K'
+#define VK_L 'L'
+#define VK_M 'M'
+#define VK_N 'N'
+#define VK_O 'O'
+#define VK_P 'P'
+#define VK_Q 'Q'
+#define VK_R 'R'
+#define VK_S 'S'
+#define VK_T 'T'
+#define VK_U 'U'
+#define VK_V 'V'
+#define VK_W 'W'
+#define VK_X 'X'
+#define VK_Y 'Y'
+#define VK_Z 'Z'
+#define VK_OPEN_BRACKET '['
+#define VK_BACK_SLASH '\\'
+#define VK_CLOSE_BRACKET ']'
+/* See gtkpeer.h */
+/* #define VK_NUMPAD0 96 */
+/* #define VK_NUMPAD1 97 */
+/* #define VK_NUMPAD2 98 */
+/* #define VK_NUMPAD3 99 */
+/* #define VK_NUMPAD4 100 */
+/* #define VK_NUMPAD5 101 */
+/* #define VK_NUMPAD6 102 */
+/* #define VK_NUMPAD7 103 */
+/* #define VK_NUMPAD8 104 */
+/* #define VK_NUMPAD9 105 */
+#define VK_MULTIPLY 106
+#define VK_ADD 107
+#define VK_SEPARATER 108
+#define VK_SEPARATOR 108
+#define VK_SUBTRACT 109
+/* See gtkpeer.h */
+/* #define VK_DECIMAL 110 */
+#define VK_DIVIDE 111
+#define VK_DELETE 127
+#define VK_NUM_LOCK 144
+#define VK_SCROLL_LOCK 145
+#define VK_F1 112
+#define VK_F2 113
+#define VK_F3 114
+#define VK_F4 115
+#define VK_F5 116
+#define VK_F6 117
+#define VK_F7 118
+#define VK_F8 119
+#define VK_F9 120
+#define VK_F10 121
+#define VK_F11 122
+#define VK_F12 123
+#define VK_F13 61440
+#define VK_F14 61441
+#define VK_F15 61442
+#define VK_F16 61443
+#define VK_F17 61444
+#define VK_F18 61445
+#define VK_F19 61446
+#define VK_F20 61447
+#define VK_F21 61448
+#define VK_F22 61449
+#define VK_F23 61450
+#define VK_F24 61451
+#define VK_PRINTSCREEN 154
+#define VK_INSERT 155
+#define VK_HELP 156
+#define VK_META 157
+#define VK_BACK_QUOTE 192
+#define VK_QUOTE 222
+#define VK_KP_UP 224
+#define VK_KP_DOWN 225
+#define VK_KP_LEFT 226
+#define VK_KP_RIGHT 227
+#define VK_DEAD_GRAVE 128
+#define VK_DEAD_ACUTE 129
+#define VK_DEAD_CIRCUMFLEX 130
+#define VK_DEAD_TILDE 131
+#define VK_DEAD_MACRON 132
+#define VK_DEAD_BREVE 133
+#define VK_DEAD_ABOVEDOT 134
+#define VK_DEAD_DIAERESIS 135
+#define VK_DEAD_ABOVERING 136
+#define VK_DEAD_DOUBLEACUTE 137
+#define VK_DEAD_CARON 138
+#define VK_DEAD_CEDILLA 139
+#define VK_DEAD_OGONEK 140
+#define VK_DEAD_IOTA 141
+#define VK_DEAD_VOICED_SOUND 142
+#define VK_DEAD_SEMIVOICED_SOUND 143
+#define VK_AMPERSAND 150
+#define VK_ASTERISK 151
+#define VK_QUOTEDBL 152
+#define VK_LESS 153
+#define VK_GREATER 160
+#define VK_BRACELEFT 161
+#define VK_BRACERIGHT 162
+#define VK_AT 512
+#define VK_COLON 513
+#define VK_CIRCUMFLEX 514
+#define VK_DOLLAR 515
+#define VK_EURO_SIGN 516
+#define VK_EXCLAMATION_MARK 517
+#define VK_INVERTED_EXCLAMATION_MARK 518
+#define VK_LEFT_PARENTHESIS 519
+#define VK_NUMBER_SIGN 520
+#define VK_PLUS 521
+#define VK_RIGHT_PARENTHESIS 522
+#define VK_UNDERSCORE 523
+#define VK_FINAL 24
+#define VK_CONVERT 28
+#define VK_NONCONVERT 29
+#define VK_ACCEPT 30
+#define VK_MODECHANGE 31
+#define VK_KANA 21
+#define VK_KANJI 25
+#define VK_ALPHANUMERIC 240
+#define VK_KATAKANA 241
+#define VK_HIRAGANA 242
+#define VK_FULL_WIDTH 243
+#define VK_HALF_WIDTH 244
+#define VK_ROMAN_CHARACTERS 245
+#define VK_ALL_CANDIDATES 256
+#define VK_PREVIOUS_CANDIDATE 257
+#define VK_CODE_INPUT 258
+#define VK_JAPANESE_KATAKANA 259
+#define VK_JAPANESE_HIRAGANA 260
+#define VK_JAPANESE_ROMAN 261
+#define VK_KANA_LOCK 262
+#define VK_INPUT_METHOD_ON_OFF 263
+#define VK_CUT 65489
+#define VK_COPY 65485
+#define VK_PASTE 65487
+#define VK_UNDO 65483
+#define VK_AGAIN 65481
+#define VK_FIND 65488
+#define VK_PROPS 65482
+#define VK_STOP 65480
+#define VK_COMPOSE 65312
+#define VK_ALT_GRAPH 65406
+#define VK_UNDEFINED 0
+
+#define AWT_KEY_CHAR_UNDEFINED 0
+
+#define AWT_FRAME_STATE_NORMAL 0
+#define AWT_FRAME_STATE_ICONIFIED 1
+#define AWT_FRAME_STATE_MAXIMIZED_HORIZ 2
+#define AWT_FRAME_STATE_MAXIMIZED_VERT 4
+#define AWT_FRAME_STATE_MAXIMIZED_BOTH 6
+
+static jmethodID postKeyEventID;
+static jmethodID postWindowEventID;
+static jmethodID postConfigureEventID;
+static jmethodID postInsetsChangedEventID;
+static jmethodID windowGetWidthID;
+static jmethodID windowGetHeightID;
+static jmethodID setBoundsCallbackID;
+
+void
+cp_gtk_window_init_jni (void)
+{
+ jclass window;
+ jclass gtkwindowpeer;
+
+ window = (*cp_gtk_gdk_env())->FindClass (cp_gtk_gdk_env(), "java/awt/Window");
+
+ setBoundsCallbackID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), window,
+ "setBoundsCallback",
+ "(IIII)V");
+
+ gtkwindowpeer = (*cp_gtk_gdk_env())->FindClass (cp_gtk_gdk_env(),
+ "gnu/java/awt/peer/gtk/GtkWindowPeer");
+
+ postKeyEventID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), gtkwindowpeer,
+ "postKeyEvent", "(IJIICI)V");
+
+ postWindowEventID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), gtkwindowpeer,
+ "postWindowEvent",
+ "(ILjava/awt/Window;I)V");
+
+ postConfigureEventID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), gtkwindowpeer,
+ "postConfigureEvent", "(IIII)V");
+
+ postInsetsChangedEventID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), gtkwindowpeer,
+ "postInsetsChangedEvent",
+ "(IIII)V");
+
+ windowGetWidthID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), gtkwindowpeer,
+ "getWidth", "()I");
+
+ windowGetHeightID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), gtkwindowpeer,
+ "getHeight", "()I");
+
+ gtkwindowpeer = (*cp_gtk_gdk_env())->FindClass (cp_gtk_gdk_env(),
+ "gnu/java/awt/peer/gtk/GtkWindowPeer");
+}
+
+/* Get the first keyval in the keymap for this event's keycode. The
+ first keyval corresponds roughly to Java's notion of a virtual
+ key. Returns the uppercase version of the first keyval. */
+static guint
+get_first_keyval_from_keymap (GdkEventKey *event)
+{
+ guint keyval;
+ guint *keyvals;
+ gint n_entries;
+
+ if (!gdk_keymap_get_entries_for_keycode (NULL,
+ event->hardware_keycode,
+ NULL,
+ &keyvals,
+ &n_entries))
+ {
+ g_warning ("No keyval found for hardware keycode %d\n",
+ event->hardware_keycode);
+ /* Try to recover by using the keyval in the event structure. */
+ keyvals = &(event->keyval);
+ }
+ keyval = keyvals[0];
+ g_free (keyvals);
+
+ return gdk_keyval_to_upper (keyval);
+}
+
+#ifdef __GNUC__
+__inline
+#endif
+static jint
+keysym_to_awt_keycode (GdkEventKey *event)
+{
+ guint ukeyval;
+ guint state;
+
+ ukeyval = get_first_keyval_from_keymap (event);
+ state = event->state;
+
+ /* VK_A through VK_Z */
+ if (ukeyval >= GDK_A && ukeyval <= GDK_Z)
+ return ukeyval;
+
+ /* VK_0 through VK_9 */
+ if (ukeyval >= GDK_0 && ukeyval <= GDK_9)
+ return ukeyval;
+
+ switch (ukeyval)
+ {
+ case GDK_Return:
+ case GDK_KP_Enter:
+ return VK_ENTER;
+ case GDK_BackSpace:
+ return VK_BACK_SPACE;
+ case GDK_Tab:
+ return VK_TAB;
+ case GDK_Cancel:
+ return VK_CANCEL;
+ case GDK_Clear:
+ return VK_CLEAR;
+ case GDK_Shift_L:
+ case GDK_Shift_R:
+ return VK_SHIFT;
+ case GDK_Control_L:
+ case GDK_Control_R:
+ return VK_CONTROL;
+ case GDK_Alt_L:
+ case GDK_Alt_R:
+ return VK_ALT;
+ case GDK_Pause:
+ return VK_PAUSE;
+ case GDK_Caps_Lock:
+ return VK_CAPS_LOCK;
+ case GDK_Escape:
+ return VK_ESCAPE;
+ case GDK_space:
+ return VK_SPACE;
+ case GDK_KP_Page_Up:
+ /* For keys on the numeric keypad, the JVM produces one of two
+ virtual keys, depending on the num lock state. */
+ if (state & GDK_MOD2_MASK)
+ return VK_NUMPAD9;
+ else
+ return VK_PAGE_UP;
+ case GDK_Page_Up:
+ return VK_PAGE_UP;
+ case GDK_KP_Page_Down:
+ if (state & GDK_MOD2_MASK)
+ return VK_NUMPAD3;
+ else
+ return VK_PAGE_DOWN;
+ case GDK_Page_Down:
+ return VK_PAGE_DOWN;
+ case GDK_KP_End:
+ if (state & GDK_MOD2_MASK)
+ return VK_NUMPAD1;
+ else
+ return VK_END;
+ case GDK_End:
+ return VK_END;
+ case GDK_KP_Home:
+ if (state & GDK_MOD2_MASK)
+ return VK_NUMPAD7;
+ else
+ return VK_HOME;
+ case GDK_Home:
+ return VK_HOME;
+ case GDK_KP_Begin:
+ if (state & GDK_MOD2_MASK)
+ return VK_NUMPAD5;
+ else
+ return VK_UNDEFINED;
+ case GDK_Left:
+ return VK_LEFT;
+ case GDK_Up:
+ return VK_UP;
+ case GDK_Right:
+ return VK_RIGHT;
+ case GDK_Down:
+ return VK_DOWN;
+ case GDK_comma:
+ return VK_COMMA;
+ case GDK_minus:
+ return VK_MINUS;
+ case GDK_period:
+ return VK_PERIOD;
+ case GDK_slash:
+ return VK_SLASH;
+ /*
+ return VK_0;
+ return VK_1;
+ return VK_2;
+ return VK_3;
+ return VK_4;
+ return VK_5;
+ return VK_6;
+ return VK_7;
+ return VK_8;
+ return VK_9;
+ */
+ case GDK_semicolon:
+ return VK_SEMICOLON;
+ case GDK_equal:
+ return VK_EQUALS;
+ /*
+ return VK_A;
+ return VK_B;
+ return VK_C;
+ return VK_D;
+ return VK_E;
+ return VK_F;
+ return VK_G;
+ return VK_H;
+ return VK_I;
+ return VK_J;
+ return VK_K;
+ return VK_L;
+ return VK_M;
+ return VK_N;
+ return VK_O;
+ return VK_P;
+ return VK_Q;
+ return VK_R;
+ return VK_S;
+ return VK_T;
+ return VK_U;
+ return VK_V;
+ return VK_W;
+ return VK_X;
+ return VK_Y;
+ return VK_Z;
+ */
+ case GDK_bracketleft:
+ return VK_OPEN_BRACKET;
+ case GDK_backslash:
+ return VK_BACK_SLASH;
+ case GDK_bracketright:
+ return VK_CLOSE_BRACKET;
+ case GDK_KP_0:
+ return VK_NUMPAD0;
+ case GDK_KP_1:
+ return VK_NUMPAD1;
+ case GDK_KP_2:
+ return VK_NUMPAD2;
+ case GDK_KP_3:
+ return VK_NUMPAD3;
+ case GDK_KP_4:
+ return VK_NUMPAD4;
+ case GDK_KP_5:
+ return VK_NUMPAD5;
+ case GDK_KP_6:
+ return VK_NUMPAD6;
+ case GDK_KP_7:
+ return VK_NUMPAD7;
+ case GDK_KP_8:
+ return VK_NUMPAD8;
+ case GDK_KP_9:
+ return VK_NUMPAD9;
+ case GDK_KP_Multiply:
+ return VK_MULTIPLY;
+ case GDK_KP_Add:
+ return VK_ADD;
+ /*
+ return VK_SEPARATER;
+ */
+ case GDK_KP_Separator:
+ return VK_SEPARATOR;
+ case GDK_KP_Subtract:
+ return VK_SUBTRACT;
+ case GDK_KP_Decimal:
+ return VK_DECIMAL;
+ case GDK_KP_Divide:
+ return VK_DIVIDE;
+ case GDK_KP_Delete:
+ if (state & GDK_MOD2_MASK)
+ return VK_DECIMAL;
+ else
+ return VK_DELETE;
+ case GDK_Delete:
+ return VK_DELETE;
+ case GDK_Num_Lock:
+ return VK_NUM_LOCK;
+ case GDK_Scroll_Lock:
+ return VK_SCROLL_LOCK;
+ case GDK_F1:
+ return VK_F1;
+ case GDK_F2:
+ return VK_F2;
+ case GDK_F3:
+ return VK_F3;
+ case GDK_F4:
+ return VK_F4;
+ case GDK_F5:
+ return VK_F5;
+ case GDK_F6:
+ return VK_F6;
+ case GDK_F7:
+ return VK_F7;
+ case GDK_F8:
+ return VK_F8;
+ case GDK_F9:
+ return VK_F9;
+ case GDK_F10:
+ return VK_F10;
+ case GDK_F11:
+ return VK_F11;
+ case GDK_F12:
+ return VK_F12;
+ case GDK_F13:
+ return VK_F13;
+ case GDK_F14:
+ return VK_F14;
+ case GDK_F15:
+ return VK_F15;
+ case GDK_F16:
+ return VK_F16;
+ case GDK_F17:
+ return VK_F17;
+ case GDK_F18:
+ return VK_F18;
+ case GDK_F19:
+ return VK_F19;
+ case GDK_F20:
+ return VK_F20;
+ case GDK_F21:
+ return VK_F21;
+ case GDK_F22:
+ return VK_F22;
+ case GDK_F23:
+ return VK_F23;
+ case GDK_F24:
+ return VK_F24;
+ case GDK_Print:
+ return VK_PRINTSCREEN;
+ case GDK_KP_Insert:
+ if (state & GDK_MOD2_MASK)
+ return VK_NUMPAD0;
+ else
+ return VK_INSERT;
+ case GDK_Insert:
+ return VK_INSERT;
+ case GDK_Help:
+ return VK_HELP;
+ case GDK_Meta_L:
+ case GDK_Meta_R:
+ return VK_META;
+ case GDK_grave:
+ return VK_BACK_QUOTE;
+ case GDK_apostrophe:
+ return VK_QUOTE;
+ case GDK_KP_Up:
+ if (state & GDK_MOD2_MASK)
+ return VK_NUMPAD8;
+ else
+ return VK_KP_UP;
+ case GDK_KP_Down:
+ if (state & GDK_MOD2_MASK)
+ return VK_NUMPAD2;
+ else
+ return VK_KP_DOWN;
+ case GDK_KP_Left:
+ if (state & GDK_MOD2_MASK)
+ return VK_NUMPAD4;
+ else
+ return VK_KP_LEFT;
+ case GDK_KP_Right:
+ if (state & GDK_MOD2_MASK)
+ return VK_NUMPAD6;
+ else
+ return VK_KP_RIGHT;
+ case GDK_dead_grave:
+ return VK_DEAD_GRAVE;
+ case GDK_dead_acute:
+ return VK_DEAD_ACUTE;
+ case GDK_dead_circumflex:
+ return VK_DEAD_CIRCUMFLEX;
+ case GDK_dead_tilde:
+ return VK_DEAD_TILDE;
+ case GDK_dead_macron:
+ return VK_DEAD_MACRON;
+ case GDK_dead_breve:
+ return VK_DEAD_BREVE;
+ case GDK_dead_abovedot:
+ return VK_DEAD_ABOVEDOT;
+ case GDK_dead_diaeresis:
+ return VK_DEAD_DIAERESIS;
+ case GDK_dead_abovering:
+ return VK_DEAD_ABOVERING;
+ case GDK_dead_doubleacute:
+ return VK_DEAD_DOUBLEACUTE;
+ case GDK_dead_caron:
+ return VK_DEAD_CARON;
+ case GDK_dead_cedilla:
+ return VK_DEAD_CEDILLA;
+ case GDK_dead_ogonek:
+ return VK_DEAD_OGONEK;
+ case GDK_dead_iota:
+ return VK_DEAD_IOTA;
+ case GDK_dead_voiced_sound:
+ return VK_DEAD_VOICED_SOUND;
+ case GDK_dead_semivoiced_sound:
+ return VK_DEAD_SEMIVOICED_SOUND;
+ case GDK_ampersand:
+ return VK_AMPERSAND;
+ case GDK_asterisk:
+ return VK_ASTERISK;
+ case GDK_quotedbl:
+ return VK_QUOTEDBL;
+ case GDK_less:
+ return VK_LESS;
+ case GDK_greater:
+ return VK_GREATER;
+ case GDK_braceleft:
+ return VK_BRACELEFT;
+ case GDK_braceright:
+ return VK_BRACERIGHT;
+ case GDK_at:
+ return VK_AT;
+ case GDK_colon:
+ return VK_COLON;
+ case GDK_asciicircum:
+ return VK_CIRCUMFLEX;
+ case GDK_dollar:
+ return VK_DOLLAR;
+ case GDK_EuroSign:
+ return VK_EURO_SIGN;
+ case GDK_exclam:
+ return VK_EXCLAMATION_MARK;
+ case GDK_exclamdown:
+ return VK_INVERTED_EXCLAMATION_MARK;
+ case GDK_parenleft:
+ return VK_LEFT_PARENTHESIS;
+ case GDK_numbersign:
+ return VK_NUMBER_SIGN;
+ case GDK_plus:
+ return VK_PLUS;
+ case GDK_parenright:
+ return VK_RIGHT_PARENTHESIS;
+ case GDK_underscore:
+ return VK_UNDERSCORE;
+ /*
+ return VK_FINAL;
+ return VK_CONVERT;
+ return VK_NONCONVERT;
+ return VK_ACCEPT;
+ */
+ case GDK_Mode_switch:
+ return VK_MODECHANGE;
+ /*
+ return VK_KANA;
+ */
+ case GDK_Kanji:
+ return VK_KANJI;
+ /*
+ return VK_ALPHANUMERIC;
+ */
+ case GDK_Katakana:
+ return VK_KATAKANA;
+ case GDK_Hiragana:
+ return VK_HIRAGANA;
+ /*
+ return VK_FULL_WIDTH;
+ return VK_HALF_WIDTH;
+ return VK_ROMAN_CHARACTERS;
+ return VK_ALL_CANDIDATES;
+ */
+ case GDK_PreviousCandidate:
+ return VK_PREVIOUS_CANDIDATE;
+ case GDK_Codeinput:
+ return VK_CODE_INPUT;
+ /*
+ return VK_JAPANESE_KATAKANA;
+ return VK_JAPANESE_HIRAGANA;
+ return VK_JAPANESE_ROMAN;
+ */
+ case GDK_Kana_Lock:
+ return VK_KANA_LOCK;
+ /*
+ return VK_INPUT_METHOD_ON_OFF;
+ return VK_CUT;
+ return VK_COPY;
+ return VK_PASTE;
+ return VK_UNDO;
+ return VK_AGAIN;
+ return VK_FIND;
+ return VK_PROPS;
+ return VK_STOP;
+ return VK_COMPOSE;
+ return VK_ALT_GRAPH;
+ */
+ default:
+ return VK_UNDEFINED;
+ }
+}
+
+static jint
+keysym_to_awt_keylocation (GdkEventKey *event)
+{
+ guint ukeyval;
+
+ ukeyval = get_first_keyval_from_keymap (event);
+
+ /* VK_A through VK_Z */
+ if (ukeyval >= GDK_A && ukeyval <= GDK_Z)
+ return AWT_KEY_LOCATION_STANDARD;
+
+ /* VK_0 through VK_9 */
+ if (ukeyval >= GDK_0 && ukeyval <= GDK_9)
+ return AWT_KEY_LOCATION_STANDARD;
+
+ switch (ukeyval)
+ {
+ case GDK_Shift_L:
+ case GDK_Control_L:
+ case GDK_Alt_L:
+ case GDK_Meta_L:
+ return AWT_KEY_LOCATION_LEFT;
+
+ case GDK_Shift_R:
+ case GDK_Control_R:
+ case GDK_Alt_R:
+ case GDK_Meta_R:
+ return AWT_KEY_LOCATION_RIGHT;
+
+ case GDK_Return:
+ case GDK_BackSpace:
+ case GDK_Tab:
+ case GDK_Cancel:
+ case GDK_Clear:
+ case GDK_Pause:
+ case GDK_Caps_Lock:
+ case GDK_Escape:
+ case GDK_space:
+ case GDK_Page_Up:
+ case GDK_Page_Down:
+ case GDK_End:
+ case GDK_Home:
+ case GDK_Left:
+ case GDK_Up:
+ case GDK_Right:
+ case GDK_Down:
+ case GDK_comma:
+ case GDK_minus:
+ case GDK_period:
+ case GDK_slash:
+ case GDK_semicolon:
+ case GDK_equal:
+ case GDK_bracketleft:
+ case GDK_backslash:
+ case GDK_bracketright:
+ case GDK_Delete:
+ case GDK_Scroll_Lock:
+ case GDK_F1:
+ case GDK_F2:
+ case GDK_F3:
+ case GDK_F4:
+ case GDK_F5:
+ case GDK_F6:
+ case GDK_F7:
+ case GDK_F8:
+ case GDK_F9:
+ case GDK_F10:
+ case GDK_F11:
+ case GDK_F12:
+ case GDK_F13:
+ case GDK_F14:
+ case GDK_F15:
+ case GDK_F16:
+ case GDK_F17:
+ case GDK_F18:
+ case GDK_F19:
+ case GDK_F20:
+ case GDK_F21:
+ case GDK_F22:
+ case GDK_F23:
+ case GDK_F24:
+ case GDK_Print:
+ case GDK_Insert:
+ case GDK_Help:
+ case GDK_grave:
+ case GDK_apostrophe:
+ case GDK_dead_grave:
+ case GDK_dead_acute:
+ case GDK_dead_circumflex:
+ case GDK_dead_tilde:
+ case GDK_dead_macron:
+ case GDK_dead_breve:
+ case GDK_dead_abovedot:
+ case GDK_dead_diaeresis:
+ case GDK_dead_abovering:
+ case GDK_dead_doubleacute:
+ case GDK_dead_caron:
+ case GDK_dead_cedilla:
+ case GDK_dead_ogonek:
+ case GDK_dead_iota:
+ case GDK_dead_voiced_sound:
+ case GDK_dead_semivoiced_sound:
+ case GDK_ampersand:
+ case GDK_asterisk:
+ case GDK_quotedbl:
+ case GDK_less:
+ case GDK_greater:
+ case GDK_braceleft:
+ case GDK_braceright:
+ case GDK_at:
+ case GDK_colon:
+ case GDK_asciicircum:
+ case GDK_dollar:
+ case GDK_EuroSign:
+ case GDK_exclam:
+ case GDK_exclamdown:
+ case GDK_parenleft:
+ case GDK_numbersign:
+ case GDK_plus:
+ case GDK_parenright:
+ case GDK_underscore:
+ case GDK_Mode_switch:
+ case GDK_Kanji:
+ case GDK_Katakana:
+ case GDK_Hiragana:
+ case GDK_PreviousCandidate:
+ case GDK_Codeinput:
+ case GDK_Kana_Lock:
+ return AWT_KEY_LOCATION_STANDARD;
+
+ case GDK_KP_Enter:
+ case GDK_KP_Page_Up:
+ case GDK_KP_Page_Down:
+ case GDK_KP_End:
+ case GDK_KP_Home:
+ case GDK_KP_Begin:
+ case GDK_KP_0:
+ case GDK_KP_1:
+ case GDK_KP_2:
+ case GDK_KP_3:
+ case GDK_KP_4:
+ case GDK_KP_5:
+ case GDK_KP_6:
+ case GDK_KP_7:
+ case GDK_KP_8:
+ case GDK_KP_9:
+ case GDK_KP_Multiply:
+ case GDK_KP_Add:
+ case GDK_KP_Separator:
+ case GDK_KP_Subtract:
+ case GDK_KP_Decimal:
+ case GDK_KP_Divide:
+ case GDK_KP_Delete:
+ case GDK_Num_Lock:
+ case GDK_KP_Insert:
+ case GDK_KP_Up:
+ case GDK_KP_Down:
+ case GDK_KP_Left:
+ case GDK_KP_Right:
+ return AWT_KEY_LOCATION_NUMPAD;
+
+ default:
+ return AWT_KEY_LOCATION_UNKNOWN;
+ }
+}
+
+static jchar
+keyevent_to_awt_keychar (GdkEventKey *event)
+{
+ if (event->length > 0)
+ {
+ /* Translate GDK carriage return to Java linefeed. */
+ if (event->string[0] == 13)
+ return VK_ENTER;
+ else
+ return event->string[0];
+ }
+ else
+ {
+ switch (event->keyval)
+ {
+ case GDK_BackSpace:
+ return VK_BACK_SPACE;
+ case GDK_Tab:
+ return VK_TAB;
+ case GDK_Delete:
+ case GDK_KP_Delete:
+ return VK_DELETE;
+ default:
+ return AWT_KEY_CHAR_UNDEFINED;
+ }
+ }
+}
+
+/* Modifier key events need special treatment. In Sun's peer
+ implementation, when a modifier key is pressed, the KEY_PRESSED
+ event has that modifier in its modifiers list. The corresponding
+ KEY_RELEASED event's modifier list does not contain the modifier.
+ For example, pressing and releasing the shift key will produce a
+ key press event with modifiers=Shift, and a key release event with
+ no modifiers. GDK's key events behave in the exact opposite way,
+ so this translation code is needed. */
+static jint
+keyevent_state_to_awt_mods (GdkEventKey *event)
+{
+ jint result = 0;
+ guint state;
+
+ if (event->type == GDK_KEY_PRESS)
+ {
+ state = event->state;
+
+ if (event->keyval == GDK_Shift_L
+ || event->keyval == GDK_Shift_R)
+ result |= AWT_SHIFT_DOWN_MASK;
+ else
+ {
+ if (state & GDK_SHIFT_MASK)
+ result |= AWT_SHIFT_DOWN_MASK;
+ }
+
+ if (event->keyval == GDK_Control_L
+ || event->keyval == GDK_Control_R)
+ result |= AWT_CTRL_DOWN_MASK;
+ else
+ {
+ if (state & GDK_CONTROL_MASK)
+ result |= AWT_CTRL_DOWN_MASK;
+ }
+
+ if (event->keyval == GDK_Alt_L
+ || event->keyval == GDK_Alt_R)
+ result |= AWT_ALT_DOWN_MASK;
+ else
+ {
+ if (state & GDK_MOD1_MASK)
+ result |= AWT_ALT_DOWN_MASK;
+ }
+ }
+ else if (event->type == GDK_KEY_RELEASE)
+ {
+ state = event->state;
+
+ if (event->keyval != GDK_Shift_L
+ && event->keyval != GDK_Shift_R)
+ {
+ if (state & GDK_SHIFT_MASK)
+ result |= AWT_SHIFT_DOWN_MASK;
+ }
+ if (event->keyval != GDK_Control_L
+ && event->keyval != GDK_Control_R)
+ {
+ if (state & GDK_CONTROL_MASK)
+ result |= AWT_CTRL_DOWN_MASK;
+ }
+
+ if (event->keyval != GDK_Alt_L
+ && event->keyval != GDK_Alt_R)
+ {
+ if (state & GDK_MOD1_MASK)
+ result |= AWT_ALT_DOWN_MASK;
+ }
+ }
+
+ return result;
+}
+
+static gboolean window_configure_cb (GtkWidget *widget,
+ GdkEventConfigure *event,
+ jobject peer);
/* FIXME: we're currently seeing the double-activation that occurs
with metacity and GTK. See
@@ -82,6 +1047,73 @@ static gboolean window_property_changed_cb (GtkWidget *widget,
jobject peer);
static void realize_cb (GtkWidget *widget, jobject peer);
+static gboolean
+window_configure_cb (GtkWidget *widget __attribute__((unused)),
+ GdkEventConfigure *event,
+ jobject peer)
+{
+ gdk_threads_leave ();
+
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
+ postConfigureEventID,
+ (jint) event->x,
+ (jint) event->y,
+ (jint) event->width,
+ (jint) event->height);
+
+ gdk_threads_enter ();
+
+ return FALSE;
+}
+
+static gboolean
+key_press_cb (GtkWidget *widget __attribute__((unused)),
+ GdkEventKey *event,
+ jobject peer)
+{
+ gdk_threads_leave ();
+
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
+ postKeyEventID,
+ (jint) AWT_KEY_PRESSED,
+ (jlong) event->time,
+ keyevent_state_to_awt_mods (event),
+ keysym_to_awt_keycode (event),
+ keyevent_to_awt_keychar (event),
+ keysym_to_awt_keylocation (event));
+
+ gdk_threads_enter ();
+
+ /* FIXME: generation of key typed events needs to be moved
+ to GtkComponentPeer.postKeyEvent. If the key in a key
+ press event is not an "action" key
+ (KeyEvent.isActionKey) and is not a modifier key, then
+ it should generate a key typed event. */
+ return TRUE;
+}
+
+
+static gboolean
+key_release_cb (GtkWidget *widget __attribute__((unused)),
+ GdkEventKey *event,
+ jobject peer)
+{
+ gdk_threads_leave ();
+
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
+ postKeyEventID,
+ (jint) AWT_KEY_RELEASED,
+ (jlong) event->time,
+ keyevent_state_to_awt_mods (event),
+ keysym_to_awt_keycode (event),
+ keyevent_to_awt_keychar (event),
+ keysym_to_awt_keylocation (event));
+
+ gdk_threads_enter ();
+
+ return TRUE;
+}
+
/* Union used for type punning. */
union extents_union
{
@@ -122,9 +1154,10 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_create
gtk_window_set_type_hint (window, type);
- gtk_window_group_add_window (global_gtk_window_group, window);
+ gtk_window_group_add_window (cp_gtk_global_window_group, window);
fixed = gtk_fixed_new ();
+
gtk_container_add (GTK_CONTAINER (window_widget), fixed);
gtk_widget_show (fixed);
@@ -216,9 +1249,6 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_connectSignals
ptr = NSA_GET_PTR (env, obj);
gref = NSA_GET_GLOBAL_REF (env, obj);
- g_signal_connect (G_OBJECT (ptr), "event",
- G_CALLBACK (pre_event_handler), *gref);
-
g_signal_connect (G_OBJECT (ptr), "delete-event",
G_CALLBACK (window_delete_cb), *gref);
@@ -249,14 +1279,38 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_connectSignals
g_signal_connect_after (G_OBJECT (ptr), "realize",
G_CALLBACK (realize_cb), *gref);
- g_signal_connect_after (G_OBJECT (ptr), "realize",
- G_CALLBACK (connect_awt_hook_cb), *gref);
+ g_signal_connect (G_OBJECT (ptr), "key-press-event",
+ G_CALLBACK (key_press_cb), *gref);
+
+ g_signal_connect (G_OBJECT (ptr), "key-release-event",
+ G_CALLBACK (key_release_cb), *gref);
+ g_signal_connect_after (G_OBJECT (ptr), "window-state-event",
+ G_CALLBACK (window_window_state_cb), *gref);
+
+ g_signal_connect (G_OBJECT (ptr), "configure-event",
+ G_CALLBACK (window_configure_cb), *gref);
+
+ cp_gtk_component_connect_expose_signals (ptr, gref);
+ cp_gtk_component_connect_mouse_signals (ptr, gref);
+
+ /* FIXME: override focus signals here to prevent child fixed repaint? */
+
+ gdk_threads_leave ();
+}
+
+/* Realize the window here so that its frame extents are known now.
+ That way Window.pack can operate with the accurate insets returned
+ by the window manager rather than the default estimates. */
+JNIEXPORT void JNICALL
+Java_gnu_java_awt_peer_gtk_GtkWindowPeer_realize (JNIEnv *env, jobject obj)
+{
+ void *ptr;
+
+ gdk_threads_enter ();
+
+ ptr = NSA_GET_PTR (env, obj);
- /* Realize the window here so that its frame extents are known now.
- That way Window.pack can operate with the accurate insets
- returned by the window manager rather than the default
- estimates. */
gtk_widget_realize (GTK_WIDGET (ptr));
gdk_threads_leave ();
@@ -301,7 +1355,7 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setBoundsCallback
{
/* Circumvent package-private access to call Window's
setBoundsCallback method. */
- (*gdk_env())->CallVoidMethod (gdk_env(), window, setBoundsCallbackID,
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), window, setBoundsCallbackID,
x, y, width, height);
}
@@ -479,7 +1533,7 @@ window_delete_cb (GtkWidget *widget __attribute__((unused)),
{
gdk_threads_leave ();
- (*gdk_env())->CallVoidMethod (gdk_env(), peer,
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
postWindowEventID,
(jint) AWT_WINDOW_CLOSING,
(jobject) NULL, (jint) 0);
@@ -500,7 +1554,7 @@ window_destroy_cb (GtkWidget *widget __attribute__((unused)),
{
gdk_threads_leave ();
- (*gdk_env())->CallVoidMethod (gdk_env(), peer,
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
postWindowEventID,
(jint) AWT_WINDOW_CLOSED,
(jobject) NULL, (jint) 0);
@@ -514,7 +1568,7 @@ window_show_cb (GtkWidget *widget __attribute__((unused)),
{
gdk_threads_leave ();
- (*gdk_env())->CallVoidMethod (gdk_env(), peer,
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
postWindowEventID,
(jint) AWT_WINDOW_OPENED,
(jobject) NULL, (jint) 0);
@@ -533,12 +1587,12 @@ window_active_state_change_cb (GtkWidget *widget __attribute__((unused)),
gdk_threads_leave ();
if (GTK_WINDOW (widget)->is_active)
- (*gdk_env())->CallVoidMethod (gdk_env(), peer,
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
postWindowEventID,
(jint) AWT_WINDOW_GAINED_FOCUS,
(jobject) NULL, (jint) 0);
else
- (*gdk_env())->CallVoidMethod (gdk_env(), peer,
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
postWindowEventID,
(jint) AWT_WINDOW_DEACTIVATED,
(jobject) NULL, (jint) 0);
@@ -555,12 +1609,12 @@ window_focus_state_change_cb (GtkWidget *widget,
gdk_threads_leave ();
if (GTK_WINDOW (widget)->has_toplevel_focus)
- (*gdk_env())->CallVoidMethod (gdk_env(), peer,
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
postWindowEventID,
(jint) AWT_WINDOW_ACTIVATED,
(jobject) NULL, (jint) 0);
else
- (*gdk_env())->CallVoidMethod (gdk_env(), peer,
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
postWindowEventID,
(jint) AWT_WINDOW_DEACTIVATED,
(jobject) NULL, (jint) 0);
@@ -575,7 +1629,7 @@ window_focus_in_cb (GtkWidget * widget __attribute__((unused)),
{
gdk_threads_leave ();
- (*gdk_env())->CallVoidMethod (gdk_env(), peer,
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
postWindowEventID,
(jint) AWT_WINDOW_GAINED_FOCUS,
(jobject) NULL, (jint) 0);
@@ -592,7 +1646,7 @@ window_focus_out_cb (GtkWidget * widget __attribute__((unused)),
{
gdk_threads_leave ();
- (*gdk_env())->CallVoidMethod (gdk_env(), peer,
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
postWindowEventID,
(jint) AWT_WINDOW_LOST_FOCUS,
(jobject) NULL, (jint) 0);
@@ -618,7 +1672,7 @@ window_window_state_cb (GtkWidget *widget,
/* We've been iconified. */
gdk_threads_leave ();
- (*gdk_env())->CallVoidMethod (gdk_env(), peer,
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
postWindowEventID,
(jint) AWT_WINDOW_ICONIFIED,
(jobject) NULL, (jint) 0);
@@ -630,7 +1684,7 @@ window_window_state_cb (GtkWidget *widget,
/* We've been deiconified. */
gdk_threads_leave ();
- (*gdk_env())->CallVoidMethod (gdk_env(), peer,
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
postWindowEventID,
(jint) AWT_WINDOW_DEICONIFIED,
(jobject) NULL, (jint) 0);
@@ -650,7 +1704,7 @@ window_window_state_cb (GtkWidget *widget,
gdk_threads_leave ();
- (*gdk_env())->CallVoidMethod (gdk_env(), peer,
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
postWindowEventID,
(jint) AWT_WINDOW_STATE_CHANGED,
(jobject) NULL, new_state);
@@ -724,7 +1778,7 @@ window_property_changed_cb (GtkWidget *widget __attribute__((unused)),
{
gdk_threads_leave ();
- (*gdk_env())->CallVoidMethod (gdk_env(), peer,
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
postInsetsChangedEventID,
(jint) extents[2], /* top */
(jint) extents[0], /* left */
@@ -748,12 +1802,12 @@ realize_cb (GtkWidget *widget, jobject peer)
jint width = 0;
jint height = 0;
- width = (*gdk_env())->CallIntMethod (gdk_env(), peer, windowGetWidthID);
- height = (*gdk_env())->CallIntMethod (gdk_env(), peer, windowGetHeightID);
+ width = (*cp_gtk_gdk_env())->CallIntMethod (cp_gtk_gdk_env(), peer, windowGetWidthID);
+ height = (*cp_gtk_gdk_env())->CallIntMethod (cp_gtk_gdk_env(), peer, windowGetHeightID);
window_get_frame_extents (widget, &top, &left, &bottom, &right);
- (*gdk_env())->CallVoidMethod (gdk_env(), peer,
+ (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
postInsetsChangedEventID,
top, left, bottom, right);
@@ -770,3 +1824,358 @@ realize_cb (GtkWidget *widget, jobject peer)
MAX (1, width - left - right),
MAX (1, height - top - bottom));
}
+
+/*
+ * This method returns a GDK keyval that corresponds to one of the
+ * keysyms in the X keymap table. The return value is only used to
+ * determine the keyval's corresponding hardware keycode, and doesn't
+ * reflect an accurate translation of a Java virtual key value to a
+ * GDK keyval.
+ */
+#ifdef __GNUC__
+__inline
+#endif
+guint
+cp_gtk_awt_keycode_to_keysym (jint keyCode, jint keyLocation)
+{
+ /* GDK_A through GDK_Z */
+ if (keyCode >= VK_A && keyCode <= VK_Z)
+ return gdk_keyval_to_lower (keyCode);
+
+ /* GDK_0 through GDK_9 */
+ if (keyCode >= VK_0 && keyCode <= VK_9)
+ return keyCode;
+
+ switch (keyCode)
+ {
+ case VK_ENTER:
+ return keyLocation == AWT_KEY_LOCATION_NUMPAD ? GDK_KP_Enter : GDK_Return;
+ case VK_BACK_SPACE:
+ return GDK_BackSpace;
+ case VK_TAB:
+ return GDK_Tab;
+ case VK_CANCEL:
+ return GDK_Cancel;
+ case VK_CLEAR:
+ return GDK_Clear;
+ case VK_SHIFT:
+ return keyLocation == AWT_KEY_LOCATION_LEFT ? GDK_Shift_L : GDK_Shift_R;
+ case VK_CONTROL:
+ return keyLocation == AWT_KEY_LOCATION_LEFT ? GDK_Control_L : GDK_Control_R;
+ case VK_ALT:
+ return keyLocation == AWT_KEY_LOCATION_LEFT ? GDK_Alt_L : GDK_Alt_R;
+ case VK_PAUSE:
+ return GDK_Pause;
+ case VK_CAPS_LOCK:
+ return GDK_Caps_Lock;
+ case VK_ESCAPE:
+ return GDK_Escape;
+ case VK_SPACE:
+ return GDK_space;
+ case VK_PAGE_UP:
+ return keyLocation == AWT_KEY_LOCATION_NUMPAD ? GDK_KP_Page_Up : GDK_Page_Up;
+ case VK_PAGE_DOWN:
+ return keyLocation == AWT_KEY_LOCATION_NUMPAD ? GDK_KP_Page_Down : GDK_Page_Down;
+ case VK_END:
+ return keyLocation == AWT_KEY_LOCATION_NUMPAD ? GDK_KP_End : GDK_End;
+ case VK_HOME:
+ return keyLocation == AWT_KEY_LOCATION_NUMPAD ? GDK_KP_Home : GDK_Home;
+ case VK_LEFT:
+ return GDK_Left;
+ case VK_UP:
+ return GDK_Up;
+ case VK_RIGHT:
+ return GDK_Right;
+ case VK_DOWN:
+ return GDK_Down;
+ case VK_COMMA:
+ return GDK_comma;
+ case VK_MINUS:
+ return GDK_minus;
+ case VK_PERIOD:
+ return GDK_period;
+ case VK_SLASH:
+ return GDK_slash;
+ /*
+ case VK_0:
+ case VK_1:
+ case VK_2:
+ case VK_3:
+ case VK_4:
+ case VK_5:
+ case VK_6:
+ case VK_7:
+ case VK_8:
+ case VK_9:
+ */
+ case VK_SEMICOLON:
+ return GDK_semicolon;
+ case VK_EQUALS:
+ return GDK_equal;
+ /*
+ case VK_A:
+ case VK_B:
+ case VK_C:
+ case VK_D:
+ case VK_E:
+ case VK_F:
+ case VK_G:
+ case VK_H:
+ case VK_I:
+ case VK_J:
+ case VK_K:
+ case VK_L:
+ case VK_M:
+ case VK_N:
+ case VK_O:
+ case VK_P:
+ case VK_Q:
+ case VK_R:
+ case VK_S:
+ case VK_T:
+ case VK_U:
+ case VK_V:
+ case VK_W:
+ case VK_X:
+ case VK_Y:
+ case VK_Z:
+ */
+ case VK_OPEN_BRACKET:
+ return GDK_bracketleft;
+ case VK_BACK_SLASH:
+ return GDK_backslash;
+ case VK_CLOSE_BRACKET:
+ return GDK_bracketright;
+ case VK_NUMPAD0:
+ return GDK_KP_0;
+ case VK_NUMPAD1:
+ return GDK_KP_1;
+ case VK_NUMPAD2:
+ return GDK_KP_2;
+ case VK_NUMPAD3:
+ return GDK_KP_3;
+ case VK_NUMPAD4:
+ return GDK_KP_4;
+ case VK_NUMPAD5:
+ return GDK_KP_5;
+ case VK_NUMPAD6:
+ return GDK_KP_6;
+ case VK_NUMPAD7:
+ return GDK_KP_7;
+ case VK_NUMPAD8:
+ return GDK_KP_8;
+ case VK_NUMPAD9:
+ return GDK_KP_9;
+ case VK_MULTIPLY:
+ return GDK_KP_Multiply;
+ case VK_ADD:
+ return GDK_KP_Add;
+ /*
+ case VK_SEPARATER:
+ */
+ case VK_SEPARATOR:
+ return GDK_KP_Separator;
+ case VK_SUBTRACT:
+ return GDK_KP_Subtract;
+ case VK_DECIMAL:
+ return GDK_KP_Decimal;
+ case VK_DIVIDE:
+ return GDK_KP_Divide;
+ case VK_DELETE:
+ return keyLocation == AWT_KEY_LOCATION_NUMPAD ? GDK_KP_Delete : GDK_Delete;
+ case VK_NUM_LOCK:
+ return GDK_Num_Lock;
+ case VK_SCROLL_LOCK:
+ return GDK_Scroll_Lock;
+ case VK_F1:
+ return GDK_F1;
+ case VK_F2:
+ return GDK_F2;
+ case VK_F3:
+ return GDK_F3;
+ case VK_F4:
+ return GDK_F4;
+ case VK_F5:
+ return GDK_F5;
+ case VK_F6:
+ return GDK_F6;
+ case VK_F7:
+ return GDK_F7;
+ case VK_F8:
+ return GDK_F8;
+ case VK_F9:
+ return GDK_F9;
+ case VK_F10:
+ return GDK_F10;
+ case VK_F11:
+ return GDK_F11;
+ case VK_F12:
+ return GDK_F12;
+ case VK_F13:
+ return GDK_F13;
+ case VK_F14:
+ return GDK_F14;
+ case VK_F15:
+ return GDK_F15;
+ case VK_F16:
+ return GDK_F16;
+ case VK_F17:
+ return GDK_F17;
+ case VK_F18:
+ return GDK_F18;
+ case VK_F19:
+ return GDK_F19;
+ case VK_F20:
+ return GDK_F20;
+ case VK_F21:
+ return GDK_F21;
+ case VK_F22:
+ return GDK_F22;
+ case VK_F23:
+ return GDK_F23;
+ case VK_F24:
+ return GDK_F24;
+ case VK_PRINTSCREEN:
+ return GDK_Print;
+ case VK_INSERT:
+ return keyLocation == AWT_KEY_LOCATION_NUMPAD ? GDK_KP_Insert : GDK_Insert;
+ case VK_HELP:
+ return GDK_Help;
+ case VK_META:
+ return keyLocation == AWT_KEY_LOCATION_LEFT ? GDK_Meta_L : GDK_Meta_R;
+ case VK_BACK_QUOTE:
+ return GDK_grave;
+ case VK_QUOTE:
+ return GDK_apostrophe;
+ case VK_KP_UP:
+ return GDK_KP_Up;
+ case VK_KP_DOWN:
+ return GDK_KP_Down;
+ case VK_KP_LEFT:
+ return GDK_KP_Left;
+ case VK_KP_RIGHT:
+ return GDK_KP_Right;
+ case VK_DEAD_GRAVE:
+ return GDK_dead_grave;
+ case VK_DEAD_ACUTE:
+ return GDK_dead_acute;
+ case VK_DEAD_CIRCUMFLEX:
+ return GDK_dead_circumflex;
+ case VK_DEAD_TILDE:
+ return GDK_dead_tilde;
+ case VK_DEAD_MACRON:
+ return GDK_dead_macron;
+ case VK_DEAD_BREVE:
+ return GDK_dead_breve;
+ case VK_DEAD_ABOVEDOT:
+ return GDK_dead_abovedot;
+ case VK_DEAD_DIAERESIS:
+ return GDK_dead_diaeresis;
+ case VK_DEAD_ABOVERING:
+ return GDK_dead_abovering;
+ case VK_DEAD_DOUBLEACUTE:
+ return GDK_dead_doubleacute;
+ case VK_DEAD_CARON:
+ return GDK_dead_caron;
+ case VK_DEAD_CEDILLA:
+ return GDK_dead_cedilla;
+ case VK_DEAD_OGONEK:
+ return GDK_dead_ogonek;
+ case VK_DEAD_IOTA:
+ return GDK_dead_iota;
+ case VK_DEAD_VOICED_SOUND:
+ return GDK_dead_voiced_sound;
+ case VK_DEAD_SEMIVOICED_SOUND:
+ return GDK_dead_semivoiced_sound;
+ case VK_AMPERSAND:
+ return GDK_ampersand;
+ case VK_ASTERISK:
+ return GDK_asterisk;
+ case VK_QUOTEDBL:
+ return GDK_quotedbl;
+ case VK_LESS:
+ return GDK_less;
+ case VK_GREATER:
+ return GDK_greater;
+ case VK_BRACELEFT:
+ return GDK_braceleft;
+ case VK_BRACERIGHT:
+ return GDK_braceright;
+ case VK_AT:
+ return GDK_at;
+ case VK_COLON:
+ return GDK_colon;
+ case VK_CIRCUMFLEX:
+ return GDK_asciicircum;
+ case VK_DOLLAR:
+ return GDK_dollar;
+ case VK_EURO_SIGN:
+ return GDK_EuroSign;
+ case VK_EXCLAMATION_MARK:
+ return GDK_exclam;
+ case VK_INVERTED_EXCLAMATION_MARK:
+ return GDK_exclamdown;
+ case VK_LEFT_PARENTHESIS:
+ return GDK_parenleft;
+ case VK_NUMBER_SIGN:
+ return GDK_numbersign;
+ case VK_PLUS:
+ return GDK_plus;
+ case VK_RIGHT_PARENTHESIS:
+ return GDK_parenright;
+ case VK_UNDERSCORE:
+ return GDK_underscore;
+ /*
+ case VK_FINAL:
+ case VK_CONVERT:
+ case VK_NONCONVERT:
+ case VK_ACCEPT:
+ */
+ case VK_MODECHANGE:
+ return GDK_Mode_switch;
+ /*
+ case VK_KANA:
+ */
+ case VK_KANJI:
+ return GDK_Kanji;
+ /*
+ case VK_ALPHANUMERIC:
+ */
+ case VK_KATAKANA:
+ return GDK_Katakana;
+ case VK_HIRAGANA:
+ return GDK_Hiragana;
+ /*
+ case VK_FULL_WIDTH:
+ case VK_HALF_WIDTH:
+ case VK_ROMAN_CHARACTERS:
+ case VK_ALL_CANDIDATES:
+ */
+ case VK_PREVIOUS_CANDIDATE:
+ return GDK_PreviousCandidate;
+ case VK_CODE_INPUT:
+ return GDK_Codeinput;
+ /*
+ case VK_JAPANESE_KATAKANA:
+ case VK_JAPANESE_HIRAGANA:
+ case VK_JAPANESE_ROMAN:
+ */
+ case VK_KANA_LOCK:
+ return GDK_Kana_Lock;
+ /*
+ case VK_INPUT_METHOD_ON_OFF:
+ case VK_CUT:
+ case VK_COPY:
+ case VK_PASTE:
+ case VK_UNDO:
+ case VK_AGAIN:
+ case VK_FIND:
+ case VK_PROPS:
+ case VK_STOP:
+ case VK_COMPOSE:
+ case VK_ALT_GRAPH:
+ */
+ default:
+ return GDK_VoidSymbol;
+ }
+}
diff --git a/native/jni/gtk-peer/gthread-jni.c b/native/jni/gtk-peer/gthread-jni.c
index be822cefd..e673de07d 100644
--- a/native/jni/gtk-peer/gthread-jni.c
+++ b/native/jni/gtk-peer/gthread-jni.c
@@ -245,7 +245,7 @@ exception statement from your version. */
/* The VM handle. This is set in
Java_gnu_java_awt_peer_gtk_GtkMainThread_gtkInit */
-JavaVM *the_vm;
+JavaVM *cp_gtk_the_vm;
/* Unions used for type punning. */
union env_union
@@ -403,8 +403,8 @@ tracing (const char fmt[], ...)
/* Cached info for Exception-wrapping */
-jclass runtimeException_class; /* java.lang.RuntimeException */
-jmethodID runtimeException_ctor; /* constructor for it */
+static jclass runtimeException_class; /* java.lang.RuntimeException */
+static jmethodID runtimeException_ctor; /* constructor for it */
/* Throw a new RuntimeException. It may wrap around an existing exception.
@@ -1456,7 +1456,7 @@ mutex_new_jni_impl (void)
tracing ("mutex_new_jni_impl()");
e.jni_env = &env;
- (*the_vm)->GetEnv (the_vm, e.void_env, JNI_VERSION_1_1);
+ (*cp_gtk_the_vm)->GetEnv (cp_gtk_the_vm, e.void_env, JNI_VERSION_1_1);
if (setup_cache (env) < 0)
{
@@ -1488,7 +1488,7 @@ mutex_lock_jni_impl (GMutex * mutex)
assert (mutexObj);
e.jni_env = &env;
- (*the_vm)->GetEnv (the_vm, e.void_env, JNI_VERSION_1_1);
+ (*cp_gtk_the_vm)->GetEnv (cp_gtk_the_vm, e.void_env, JNI_VERSION_1_1);
if (setup_cache (env) < 0)
goto done;
@@ -1526,7 +1526,7 @@ mutex_trylock_jni_impl (GMutex * gmutex)
assert (mutexObj);
e.jni_env = &env;
- (*the_vm)->GetEnv (the_vm, e.void_env, JNI_VERSION_1_1);
+ (*cp_gtk_the_vm)->GetEnv (cp_gtk_the_vm, e.void_env, JNI_VERSION_1_1);
if (setup_cache (env) < 0)
goto done;
HIDE_OLD_TROUBLE (env);
@@ -1597,7 +1597,7 @@ mutex_unlock_jni_impl (GMutex * gmutex)
tracing ("mutex_unlock_jni_impl(mutexObj=%p)", mutexObj);
e.jni_env = &env;
- (*the_vm)->GetEnv (the_vm, e.void_env, JNI_VERSION_1_1);
+ (*cp_gtk_the_vm)->GetEnv (cp_gtk_the_vm, e.void_env, JNI_VERSION_1_1);
if (setup_cache (env) < 0)
goto done;
HIDE_OLD_TROUBLE (env);
@@ -1629,7 +1629,7 @@ mutex_free_jni_impl (GMutex * mutex)
union env_union e;
e.jni_env = &env;
- (*the_vm)->GetEnv (the_vm, e.void_env, JNI_VERSION_1_1);
+ (*cp_gtk_the_vm)->GetEnv (cp_gtk_the_vm, e.void_env, JNI_VERSION_1_1);
if (TRACE_API_CALLS)
tracing ("mutex_free_jni_impl(%p)", mutexObj);
@@ -1659,7 +1659,7 @@ cond_new_jni_impl (void)
tracing ("mutex_free_jni_impl()");
e.jni_env = &env;
- (*the_vm)->GetEnv (the_vm, e.void_env, JNI_VERSION_1_1);
+ (*cp_gtk_the_vm)->GetEnv (cp_gtk_the_vm, e.void_env, JNI_VERSION_1_1);
condObj = allocatePlainObject (env);
@@ -1683,7 +1683,7 @@ cond_signal_jni_impl (GCond * gcond)
tracing ("cond_signal_jni_impl(condObj = %p)", condObj);
e.jni_env = &env;
- (*the_vm)->GetEnv (the_vm, e.void_env, JNI_VERSION_1_1);
+ (*cp_gtk_the_vm)->GetEnv (cp_gtk_the_vm, e.void_env, JNI_VERSION_1_1);
if (setup_cache (env) < 0)
goto done;
HIDE_OLD_TROUBLE (env);
@@ -1725,7 +1725,7 @@ cond_broadcast_jni_impl (GCond * gcond)
tracing ("cond_broadcast_jni_impl(condObj=%p)", condObj);
e.jni_env = &env;
- (*the_vm)->GetEnv (the_vm, e.void_env, JNI_VERSION_1_1);
+ (*cp_gtk_the_vm)->GetEnv (cp_gtk_the_vm, e.void_env, JNI_VERSION_1_1);
if (setup_cache (env) < 0)
goto done;
HIDE_OLD_TROUBLE (env);
@@ -1772,7 +1772,7 @@ cond_wait_jni_impl (GCond * gcond, GMutex * gmutex)
condObj, mutexObj);
e.jni_env = &env;
- (*the_vm)->GetEnv (the_vm, e.void_env, JNI_VERSION_1_1);
+ (*cp_gtk_the_vm)->GetEnv (cp_gtk_the_vm, e.void_env, JNI_VERSION_1_1);
if (setup_cache (env) < 0)
goto done;
HIDE_OLD_TROUBLE (env);
@@ -1851,7 +1851,7 @@ cond_timed_wait_jni_impl (GCond * gcond, GMutex * gmutex, GTimeVal * end_time)
e.jni_env = &env;
- (*the_vm)->GetEnv (the_vm, e.void_env, JNI_VERSION_1_1);
+ (*cp_gtk_the_vm)->GetEnv (cp_gtk_the_vm, e.void_env, JNI_VERSION_1_1);
if (setup_cache (env) < 0)
goto done;
HIDE_OLD_TROUBLE (env);
@@ -1942,7 +1942,7 @@ cond_free_jni_impl (GCond * cond)
if (TRACE_API_CALLS)
tracing ("cond_free_jni_impl(condObj = %p)", condObj);
e.jni_env = &env;
- (*the_vm)->GetEnv (the_vm, e.void_env, JNI_VERSION_1_1);
+ (*cp_gtk_the_vm)->GetEnv (cp_gtk_the_vm, e.void_env, JNI_VERSION_1_1);
freeObject (env, condObj);
@@ -1974,7 +1974,7 @@ private_new_jni_impl (GDestroyNotify notify __attribute__ ((unused)))
tracing ("private_new_jni_impl()");
e.jni_env = &env;
- (*the_vm)->GetEnv (the_vm, e.void_env, JNI_VERSION_1_1);
+ (*cp_gtk_the_vm)->GetEnv (cp_gtk_the_vm, e.void_env, JNI_VERSION_1_1);
if (setup_cache (env) < 0)
goto done;
HIDE_OLD_TROUBLE (env);
@@ -2023,7 +2023,7 @@ private_get_jni_impl (GPrivate * gkey)
tracing ("private_get_jni_impl(keyObj=%p)", keyObj);
e.jni_env = &env;
- (*the_vm)->GetEnv (the_vm, e.void_env, JNI_VERSION_1_1);
+ (*cp_gtk_the_vm)->GetEnv (cp_gtk_the_vm, e.void_env, JNI_VERSION_1_1);
if (setup_cache (env) < 0)
goto done;
HIDE_OLD_TROUBLE (env);
@@ -2079,7 +2079,7 @@ private_set_jni_impl (GPrivate * gkey, gpointer thread_specific_data)
keyObj, thread_specific_data);
e.jni_env = &env;
- (*the_vm)->GetEnv (the_vm, e.void_env, JNI_VERSION_1_1);
+ (*cp_gtk_the_vm)->GetEnv (cp_gtk_the_vm, e.void_env, JNI_VERSION_1_1);
if (setup_cache (env) < 0)
goto done;
HIDE_OLD_TROUBLE (env);
@@ -2173,7 +2173,7 @@ thread_create_jni_impl (GThreadFunc func,
}
e.jni_env = &env;
- (*the_vm)->GetEnv (the_vm, e.void_env, JNI_VERSION_1_1);
+ (*cp_gtk_the_vm)->GetEnv (cp_gtk_the_vm, e.void_env, JNI_VERSION_1_1);
if (setup_cache (env) < 0)
{
/* The failed call to setup the cache is certainly not recoverable;
@@ -2247,7 +2247,7 @@ thread_yield_jni_impl (void)
tracing ("thread_yield_jni_impl()");
e.jni_env = &env;
- (*the_vm)->GetEnv (the_vm, e.void_env, JNI_VERSION_1_1);
+ (*cp_gtk_the_vm)->GetEnv (cp_gtk_the_vm, e.void_env, JNI_VERSION_1_1);
if (setup_cache (env) < 0)
goto done;
HIDE_OLD_TROUBLE (env);
@@ -2275,7 +2275,7 @@ thread_join_jni_impl (gpointer threadID)
tracing ("thread_join_jni_impl(threadID=%p) ", threadID);
e.jni_env = &env;
- (*the_vm)->GetEnv (the_vm, e.void_env, JNI_VERSION_1_1);
+ (*cp_gtk_the_vm)->GetEnv (cp_gtk_the_vm, e.void_env, JNI_VERSION_1_1);
if (setup_cache (env) < 0)
goto done;
HIDE_OLD_TROUBLE (env);
@@ -2323,7 +2323,7 @@ thread_exit_jni_impl (void)
tracing ("thread_exit_jni_impl() ");
e.jni_env = &env;
- (*the_vm)->GetEnv (the_vm, e.void_env, JNI_VERSION_1_1);
+ (*cp_gtk_the_vm)->GetEnv (cp_gtk_the_vm, e.void_env, JNI_VERSION_1_1);
if (setup_cache (env) < 0)
goto done;
@@ -2412,7 +2412,7 @@ thread_set_priority_jni_impl (gpointer gThreadID, GThreadPriority gpriority)
gThreadID, gpriority);
e.jni_env = &env;
- (*the_vm)->GetEnv (the_vm, e.void_env, JNI_VERSION_1_1);
+ (*cp_gtk_the_vm)->GetEnv (cp_gtk_the_vm, e.void_env, JNI_VERSION_1_1);
if (setup_cache (env) < 0)
goto done;
@@ -2469,7 +2469,7 @@ thread_self_jni_impl (/* Another confusing glib prototype. This is
tracing ("thread_self_jni_impl(my_thread_IDp=%p)", my_thread_IDp);
e.jni_env = &env;
- (*the_vm)->GetEnv (the_vm, e.void_env, JNI_VERSION_1_1);
+ (*cp_gtk_the_vm)->GetEnv (cp_gtk_the_vm, e.void_env, JNI_VERSION_1_1);
if (setup_cache (env) < 0)
return;
@@ -2514,7 +2514,7 @@ thread_equal_jni_impl (gpointer thread1, gpointer thread2)
threadID1, threadID2);
e.jni_env = &env;
- (*the_vm)->GetEnv (the_vm, e.void_env, JNI_VERSION_1_1);
+ (*cp_gtk_the_vm)->GetEnv (cp_gtk_the_vm, e.void_env, JNI_VERSION_1_1);
if (setup_cache (env) < 0)
{
ret = FALSE; /* what is safer? We really don't ever want
@@ -2556,7 +2556,7 @@ done:
/************************************************************************/
/* set of function pointers to give to glib. */
-GThreadFunctions portable_native_sync_jni_functions = {
+GThreadFunctions cp_gtk_portable_native_sync_jni_functions = {
mutex_new_jni_impl, /* mutex_new */
mutex_lock_jni_impl, /* mutex_lock */
mutex_trylock_jni_impl, /* mutex_trylock */
diff --git a/native/jni/gtk-peer/gthread-jni.h b/native/jni/gtk-peer/gthread-jni.h
index e7b33a611..3d052dc10 100644
--- a/native/jni/gtk-peer/gthread-jni.h
+++ b/native/jni/gtk-peer/gthread-jni.h
@@ -42,7 +42,7 @@ exception statement from your version. */
#include <glib.h>
#include "gtkpeer.h"
-extern GThreadFunctions portable_native_sync_jni_functions;
-extern JavaVM *the_vm;
+extern GThreadFunctions cp_gtk_portable_native_sync_jni_functions;
+extern JavaVM *cp_gtk_the_vm;
#endif /* __GTHREADJNI_H__ */
diff --git a/native/jni/gtk-peer/gtkpeer.h b/native/jni/gtk-peer/gtkpeer.h
index 08bdbe180..f291d82ef 100644
--- a/native/jni/gtk-peer/gtkpeer.h
+++ b/native/jni/gtk-peer/gtkpeer.h
@@ -45,12 +45,6 @@ exception statement from your version. */
#include <jni.h>
-#define RC_FILE ".classpath-gtkrc"
-#define JVM_SUN
-/*
- #define JVM_JAPHAR
-*/
-
#ifndef __GTKPEER_H__
#define __GTKPEER_H__
@@ -58,55 +52,37 @@ exception statement from your version. */
#define __attribute__(x) /* nothing */
#endif
-#ifdef JVM_SUN
-
-extern struct state_table *native_state_table;
-extern struct state_table *native_global_ref_table;
+extern struct state_table *cp_gtk_native_state_table;
+extern struct state_table *cp_gtk_native_global_ref_table;
#define NSA_INIT(env, clazz) \
- do {native_state_table = init_state_table (env, clazz); \
- native_global_ref_table = init_state_table (env, clazz);} while (0)
+ do {cp_gtk_native_state_table = cp_gtk_init_state_table (env, clazz); \
+ cp_gtk_native_global_ref_table = cp_gtk_init_state_table (env, clazz);} while (0)
#define NSA_GET_PTR(env, obj) \
- get_state (env, obj, native_state_table)
+ cp_gtk_get_state (env, obj, cp_gtk_native_state_table)
#define NSA_SET_PTR(env, obj, ptr) \
- set_state (env, obj, native_state_table, (void *)ptr)
+ cp_gtk_set_state (env, obj, cp_gtk_native_state_table, (void *)ptr)
#define NSA_DEL_PTR(env, obj) \
- remove_state_slot (env, obj, native_state_table)
+ cp_gtk_remove_state_slot (env, obj, cp_gtk_native_state_table)
#define NSA_GET_GLOBAL_REF(env, obj) \
- get_state (env, obj, native_global_ref_table)
+ cp_gtk_get_state (env, obj, cp_gtk_native_global_ref_table)
#define NSA_SET_GLOBAL_REF(env, obj) \
do {jobject *globRefPtr; \
globRefPtr = (jobject *) malloc (sizeof (jobject)); \
*globRefPtr = (*env)->NewGlobalRef (env, obj); \
- set_state (env, obj, native_global_ref_table, (void *)globRefPtr);} while (0)
+ cp_gtk_set_state (env, obj, cp_gtk_native_global_ref_table, (void *)globRefPtr);} while (0)
#define NSA_DEL_GLOBAL_REF(env, obj) \
- do {jobject *globRefPtr = get_state (env, obj, native_global_ref_table); \
- remove_state_slot (env, obj, native_global_ref_table); \
+ do {jobject *globRefPtr = cp_gtk_get_state (env, obj, cp_gtk_native_global_ref_table); \
+ cp_gtk_remove_state_slot (env, obj, cp_gtk_native_global_ref_table); \
(*env)->DeleteGlobalRef (env, *globRefPtr); \
free (globRefPtr);} while (0)
-extern struct state_table *native_pixbufdecoder_state_table;
-
-#define NSA_PB_INIT(env, clazz) \
- native_pixbufdecoder_state_table = init_state_table (env, clazz)
-
-#define NSA_GET_PB_PTR(env, obj) \
- get_state (env, obj, native_pixbufdecoder_state_table)
-
-#define NSA_SET_PB_PTR(env, obj, ptr) \
- set_state (env, obj, native_pixbufdecoder_state_table, (void *)ptr)
-
-#define NSA_DEL_PB_PTR(env, obj) \
- remove_state_slot (env, obj, native_pixbufdecoder_state_table)
-
-#endif /* JVM_SUN */
-
#define SWAPU32(w) \
(((w) << 24) | (((w) & 0xff00) << 8) | (((w) >> 8) & 0xff00) | ((w) >> 24))
@@ -121,65 +97,15 @@ struct graphics
jint x_offset, y_offset;
};
-#define AWT_DEFAULT_CURSOR 0
-#define AWT_CROSSHAIR_CURSOR 1
-#define AWT_TEXT_CURSOR 2
-#define AWT_WAIT_CURSOR 3
-#define AWT_SW_RESIZE_CURSOR 4
-#define AWT_SE_RESIZE_CURSOR 5
-#define AWT_NW_RESIZE_CURSOR 6
-#define AWT_NE_RESIZE_CURSOR 7
-#define AWT_N_RESIZE_CURSOR 8
-#define AWT_S_RESIZE_CURSOR 9
-#define AWT_W_RESIZE_CURSOR 10
-#define AWT_E_RESIZE_CURSOR 11
-#define AWT_HAND_CURSOR 12
-#define AWT_MOVE_CURSOR 13
-
-#define SYNTHETIC_EVENT_MASK (1 << 10)
-
#define AWT_SHIFT_DOWN_MASK (1 << 6)
#define AWT_CTRL_DOWN_MASK (1 << 7)
#define AWT_META_DOWN_MASK (1 << 8)
#define AWT_ALT_DOWN_MASK (1 << 9)
-#define AWT_BUTTON1_DOWN_MASK (1 << 10)
-#define AWT_BUTTON2_DOWN_MASK (1 << 11)
-#define AWT_BUTTON3_DOWN_MASK (1 << 12)
-
#define AWT_BUTTON1_MASK (1 << 4)
#define AWT_BUTTON2_MASK (1 << 3)
#define AWT_BUTTON3_MASK (1 << 2)
-#define MULTI_CLICK_TIME 250
-/* as opposed to a MULTI_PASS_TIME :) */
-
-#define AWT_MOUSE_CLICKED 500
-#define AWT_MOUSE_PRESSED 501
-#define AWT_MOUSE_RELEASED 502
-#define AWT_MOUSE_MOVED 503
-#define AWT_MOUSE_ENTERED 504
-#define AWT_MOUSE_EXITED 505
-#define AWT_MOUSE_DRAGGED 506
-
-#define AWT_ADJUSTMENT_UNIT_INCREMENT 1
-#define AWT_ADJUSTMENT_UNIT_DECREMENT 2
-#define AWT_ADJUSTMENT_BLOCK_DECREMENT 3
-#define AWT_ADJUSTMENT_BLOCK_INCREMENT 4
-#define AWT_ADJUSTMENT_TRACK 5
-
-#define AWT_SCROLLPANE_SCROLLBARS_AS_NEEDED 0
-#define AWT_SCROLLPANE_SCROLLBARS_ALWAYS 1
-#define AWT_SCROLLPANE_SCROLLBARS_NEVER 2
-
-#define AWT_LABEL_LEFT 0
-#define AWT_LABEL_CENTER 1
-#define AWT_LABEL_RIGHT 2
-
-#define AWT_TEXTAREA_SCROLLBARS_BOTH 0
-#define AWT_TEXTAREA_SCROLLBARS_VERTICAL_ONLY 1
-#define AWT_TEXTAREA_SCROLLBARS_HORIZONTAL_ONLY 2
-
#define AWT_ITEM_SELECTED 1
#define AWT_ITEM_DESELECTED 2
@@ -187,82 +113,17 @@ struct graphics
#define AWT_KEY_PRESSED 401
#define AWT_KEY_RELEASED 402
-#define AWT_KEY_CHAR_UNDEFINED 0
-
#define AWT_KEY_LOCATION_UNKNOWN 0
#define AWT_KEY_LOCATION_STANDARD 1
#define AWT_KEY_LOCATION_LEFT 2
#define AWT_KEY_LOCATION_RIGHT 3
#define AWT_KEY_LOCATION_NUMPAD 4
-/* Virtual Keys */
-/* This list should be kept in the same order as the VK_ field
- declarations in KeyEvent.java. */
-#define VK_ENTER '\n'
-#define VK_BACK_SPACE '\b'
-#define VK_TAB '\t'
-#define VK_CANCEL 3
-#define VK_CLEAR 12
-#define VK_SHIFT 16
-#define VK_CONTROL 17
-#define VK_ALT 18
-#define VK_PAUSE 19
-#define VK_CAPS_LOCK 20
-#define VK_ESCAPE 27
-#define VK_SPACE ' '
-#define VK_PAGE_UP 33
-#define VK_PAGE_DOWN 34
-#define VK_END 35
-#define VK_HOME 36
-#define VK_LEFT 37
-#define VK_UP 38
-#define VK_RIGHT 39
-#define VK_DOWN 40
-#define VK_COMMA ','
-#define VK_MINUS '-'
-#define VK_PERIOD '.'
-#define VK_SLASH '/'
-#define VK_0 '0'
-#define VK_1 '1'
-#define VK_2 '2'
-#define VK_3 '3'
-#define VK_4 '4'
-#define VK_5 '5'
-#define VK_6 '6'
-#define VK_7 '7'
-#define VK_8 '8'
-#define VK_9 '9'
-#define VK_SEMICOLON ';'
-#define VK_EQUALS '='
-#define VK_A 'A'
-#define VK_B 'B'
-#define VK_C 'C'
-#define VK_D 'D'
-#define VK_E 'E'
-#define VK_F 'F'
-#define VK_G 'G'
-#define VK_H 'H'
-#define VK_I 'I'
-#define VK_J 'J'
-#define VK_K 'K'
-#define VK_L 'L'
-#define VK_M 'M'
-#define VK_N 'N'
-#define VK_O 'O'
-#define VK_P 'P'
-#define VK_Q 'Q'
-#define VK_R 'R'
-#define VK_S 'S'
-#define VK_T 'T'
-#define VK_U 'U'
-#define VK_V 'V'
-#define VK_W 'W'
-#define VK_X 'X'
-#define VK_Y 'Y'
-#define VK_Z 'Z'
-#define VK_OPEN_BRACKET '['
-#define VK_BACK_SLASH '\\'
-#define VK_CLOSE_BRACKET ']'
+#define AWT_STYLE_PLAIN 0
+#define AWT_STYLE_BOLD 1
+#define AWT_STYLE_ITALIC 2
+
+/* Used in GtkComponentPeer and GtkWindowPeer */
#define VK_NUMPAD0 96
#define VK_NUMPAD1 97
#define VK_NUMPAD2 98
@@ -273,229 +134,13 @@ struct graphics
#define VK_NUMPAD7 103
#define VK_NUMPAD8 104
#define VK_NUMPAD9 105
-#define VK_MULTIPLY 106
-#define VK_ADD 107
-#define VK_SEPARATER 108
-#define VK_SEPARATOR 108
-#define VK_SUBTRACT 109
#define VK_DECIMAL 110
-#define VK_DIVIDE 111
-#define VK_DELETE 127
-#define VK_NUM_LOCK 144
-#define VK_SCROLL_LOCK 145
-#define VK_F1 112
-#define VK_F2 113
-#define VK_F3 114
-#define VK_F4 115
-#define VK_F5 116
-#define VK_F6 117
-#define VK_F7 118
-#define VK_F8 119
-#define VK_F9 120
-#define VK_F10 121
-#define VK_F11 122
-#define VK_F12 123
-#define VK_F13 61440
-#define VK_F14 61441
-#define VK_F15 61442
-#define VK_F16 61443
-#define VK_F17 61444
-#define VK_F18 61445
-#define VK_F19 61446
-#define VK_F20 61447
-#define VK_F21 61448
-#define VK_F22 61449
-#define VK_F23 61450
-#define VK_F24 61451
-#define VK_PRINTSCREEN 154
-#define VK_INSERT 155
-#define VK_HELP 156
-#define VK_META 157
-#define VK_BACK_QUOTE 192
-#define VK_QUOTE 222
-#define VK_KP_UP 224
-#define VK_KP_DOWN 225
-#define VK_KP_LEFT 226
-#define VK_KP_RIGHT 227
-#define VK_DEAD_GRAVE 128
-#define VK_DEAD_ACUTE 129
-#define VK_DEAD_CIRCUMFLEX 130
-#define VK_DEAD_TILDE 131
-#define VK_DEAD_MACRON 132
-#define VK_DEAD_BREVE 133
-#define VK_DEAD_ABOVEDOT 134
-#define VK_DEAD_DIAERESIS 135
-#define VK_DEAD_ABOVERING 136
-#define VK_DEAD_DOUBLEACUTE 137
-#define VK_DEAD_CARON 138
-#define VK_DEAD_CEDILLA 139
-#define VK_DEAD_OGONEK 140
-#define VK_DEAD_IOTA 141
-#define VK_DEAD_VOICED_SOUND 142
-#define VK_DEAD_SEMIVOICED_SOUND 143
-#define VK_AMPERSAND 150
-#define VK_ASTERISK 151
-#define VK_QUOTEDBL 152
-#define VK_LESS 153
-#define VK_GREATER 160
-#define VK_BRACELEFT 161
-#define VK_BRACERIGHT 162
-#define VK_AT 512
-#define VK_COLON 513
-#define VK_CIRCUMFLEX 514
-#define VK_DOLLAR 515
-#define VK_EURO_SIGN 516
-#define VK_EXCLAMATION_MARK 517
-#define VK_INVERTED_EXCLAMATION_MARK 518
-#define VK_LEFT_PARENTHESIS 519
-#define VK_NUMBER_SIGN 520
-#define VK_PLUS 521
-#define VK_RIGHT_PARENTHESIS 522
-#define VK_UNDERSCORE 523
-#define VK_FINAL 24
-#define VK_CONVERT 28
-#define VK_NONCONVERT 29
-#define VK_ACCEPT 30
-#define VK_MODECHANGE 31
-#define VK_KANA 21
-#define VK_KANJI 25
-#define VK_ALPHANUMERIC 240
-#define VK_KATAKANA 241
-#define VK_HIRAGANA 242
-#define VK_FULL_WIDTH 243
-#define VK_HALF_WIDTH 244
-#define VK_ROMAN_CHARACTERS 245
-#define VK_ALL_CANDIDATES 256
-#define VK_PREVIOUS_CANDIDATE 257
-#define VK_CODE_INPUT 258
-#define VK_JAPANESE_KATAKANA 259
-#define VK_JAPANESE_HIRAGANA 260
-#define VK_JAPANESE_ROMAN 261
-#define VK_KANA_LOCK 262
-#define VK_INPUT_METHOD_ON_OFF 263
-#define VK_CUT 65489
-#define VK_COPY 65485
-#define VK_PASTE 65487
-#define VK_UNDO 65483
-#define VK_AGAIN 65481
-#define VK_FIND 65488
-#define VK_PROPS 65482
-#define VK_STOP 65480
-#define VK_COMPOSE 65312
-#define VK_ALT_GRAPH 65406
-#define VK_UNDEFINED 0
-
-#define AWT_FOCUS_GAINED 1004
-#define AWT_FOCUS_LOST 1005
-
-#define AWT_WINDOW_OPENED 200
-#define AWT_WINDOW_CLOSING 201
-#define AWT_WINDOW_CLOSED 202
-#define AWT_WINDOW_ICONIFIED 203
-#define AWT_WINDOW_DEICONIFIED 204
-#define AWT_WINDOW_ACTIVATED 205
-#define AWT_WINDOW_DEACTIVATED 206
-#define AWT_WINDOW_GAINED_FOCUS 207
-#define AWT_WINDOW_LOST_FOCUS 208
-#define AWT_WINDOW_STATE_CHANGED 209
-
-#define AWT_FRAME_STATE_NORMAL 0
-#define AWT_FRAME_STATE_ICONIFIED 1
-#define AWT_FRAME_STATE_MAXIMIZED_HORIZ 2
-#define AWT_FRAME_STATE_MAXIMIZED_VERT 4
-#define AWT_FRAME_STATE_MAXIMIZED_BOTH 6
-#define AWT_STYLE_PLAIN 0
-#define AWT_STYLE_BOLD 1
-#define AWT_STYLE_ITALIC 2
+JNIEnv *cp_gtk_gdk_env(void);
-/* From java.awt.SystemColor */
-#define AWT_DESKTOP 0
-#define AWT_ACTIVE_CAPTION 1
-#define AWT_ACTIVE_CAPTION_TEXT 2
-#define AWT_ACTIVE_CAPTION_BORDER 3
-#define AWT_INACTIVE_CAPTION 4
-#define AWT_INACTIVE_CAPTION_TEXT 5
-#define AWT_INACTIVE_CAPTION_BORDER 6
-#define AWT_WINDOW 7
-#define AWT_WINDOW_BORDER 8
-#define AWT_WINDOW_TEXT 9
-#define AWT_MENU 10
-#define AWT_MENU_TEXT 11
-#define AWT_TEXT 12
-#define AWT_TEXT_TEXT 13
-#define AWT_TEXT_HIGHLIGHT 14
-#define AWT_TEXT_HIGHLIGHT_TEXT 15
-#define AWT_TEXT_INACTIVE_TEXT 16
-#define AWT_CONTROL 17
-#define AWT_CONTROL_TEXT 18
-#define AWT_CONTROL_HIGHLIGHT 19
-#define AWT_CONTROL_LT_HIGHLIGHT 20
-#define AWT_CONTROL_SHADOW 21
-#define AWT_CONTROL_DK_SHADOW 22
-#define AWT_SCROLLBAR 23
-#define AWT_INFO 24
-#define AWT_INFO_TEXT 25
-#define AWT_NUM_COLORS 26
-
-extern jmethodID setBoundsCallbackID;
-
-extern jmethodID postActionEventID;
-extern jmethodID postMenuActionEventID;
-extern jmethodID postMouseEventID;
-extern jmethodID postConfigureEventID;
-extern jmethodID postExposeEventID;
-extern jmethodID postKeyEventID;
-extern jmethodID postFocusEventID;
-extern jmethodID postAdjustmentEventID;
-extern jmethodID choicePostItemEventID;
-extern jmethodID postItemEventID;
-extern jmethodID postListItemEventID;
-extern jmethodID postTextEventID;
-extern jmethodID postWindowEventID;
-
-extern jmethodID beginNativeRepaintID;
-extern jmethodID endNativeRepaintID;
-
-extern jmethodID initComponentGraphicsID;
-extern jmethodID initComponentGraphics2DID;
-extern jmethodID setCursorID;
-
-extern jmethodID syncAttrsID;
-extern jclass gdkColor;
-extern jmethodID gdkColorID;
-
-extern jmethodID postInsetsChangedEventID;
-extern jmethodID windowGetWidthID;
-extern jmethodID windowGetHeightID;
-
-JNIEnv *gdk_env(void);
-
-extern double dpi_conversion_factor;
-
-extern GtkWindowGroup *global_gtk_window_group;
-
-void awt_event_handler (GdkEvent *event);
-
-gboolean pre_event_handler (GtkWidget *widget,
- GdkEvent *event,
- jobject peer);
-
-void connect_awt_hook (JNIEnv *env, jobject peer_obj, int nwindows, ...);
-void connect_awt_hook_cb (GtkWidget *widget, jobject peer);
-
-void set_visible (GtkWidget *widget, jboolean visible);
-void set_parent (GtkWidget *widget, GtkContainer *parent);
-
-jint keyevent_state_to_awt_mods (GdkEvent *event);
-
-guint awt_keycode_to_keysym (jint keyCode, jint keyLocation);
-
-struct item_event_hook_info
-{
- jobject peer_obj;
- const char *label;
-};
+/* Global variables */
+extern double cp_gtk_dpi_conversion_factor;
+extern GtkWindowGroup *cp_gtk_global_window_group;
/* Union used for type punning. */
union widget_union
@@ -504,31 +149,57 @@ union widget_union
GtkWidget **widget;
};
+/* Keycode helpers */
+guint cp_gtk_awt_keycode_to_keysym (jint keyCode, jint keyLocation);
+
+/* Image helpers */
+GdkPixbuf *cp_gtk_image_get_pixbuf (JNIEnv *env, jobject obj);
+GdkPixmap *cp_gtk_image_get_pixmap (JNIEnv *env, jobject obj);
+jboolean cp_gtk_image_is_offscreen (JNIEnv *env, jobject obj);
+
/* JNI initialization functions */
-void classpath_gtk_textcomponent_init_jni (void);
+#if GTK_CAIRO
+void cp_gtk_graphics2d_init_jni (void);
+#endif
+void cp_gtk_graphics_init_jni (void);
+void cp_gtk_button_init_jni (void);
+void cp_gtk_checkbox_init_jni (void);
+void cp_gtk_choice_init_jni (void);
+void cp_gtk_component_init_jni (void);
+void cp_gtk_list_init_jni (void);
+void cp_gtk_menuitem_init_jni (void);
+void cp_gtk_scrollbar_init_jni (void);
+void cp_gtk_textcomponent_init_jni (void);
+void cp_gtk_window_init_jni (void);
/* Signal connection convience functions */
-void classpath_gtk_component_connect_signals (GObject *ptr, jobject *gref);
-void classpath_gtk_component_connect_nonfocus_signals (GObject *ptr, jobject *gref);
-void classpath_gtk_textcomponent_connect_signals (GObject *ptr, jobject *gref);
+void cp_gtk_component_connect_expose_signals (GObject *ptr, jobject *gref);
+void cp_gtk_component_connect_focus_signals (GObject *ptr, jobject *gref);
+void cp_gtk_component_connect_mouse_signals (GObject *ptr, jobject *gref);
+void cp_gtk_component_connect_signals (GObject *ptr, jobject *gref);
+void cp_gtk_textcomponent_connect_signals (GObject *ptr, jobject *gref);
-/* GtkImage functions used by other gtk peer native routines */
-GdkPixbuf *gnu_java_awt_peer_gtk_GtkImage_getPixbuf(JNIEnv *env, jobject obj);
-GdkPixmap *gnu_java_awt_peer_gtk_GtkImage_getPixmap(JNIEnv *env, jobject obj);
-jboolean gnu_java_awt_peer_gtk_GtkImage_isOffScreen(JNIEnv *env, jobject obj);
+/* Debugging */
+void cp_gtk_print_current_thread (void);
#define DEBUG_LOCKING 0
#if DEBUG_LOCKING
-#define gdk_threads_enter() \
-{ \
- g_print ("lock: %s, %d\n", __FILE__, __LINE__); \
- gdk_threads_enter (); \
+#define gdk_threads_enter() \
+{ \
+ g_print ("locking: %s, %d\n", __FILE__, __LINE__); \
+ cp_gtk_print_current_thread (); \
+ gdk_threads_enter (); \
+ g_print ("locked: %s, %d\n", __FILE__, __LINE__); \
+ cp_gtk_print_current_thread (); \
}
-#define gdk_threads_leave() \
-{ \
- g_print ("unlock: %s, %d\n", __FILE__, __LINE__); \
- gdk_threads_leave (); \
+#define gdk_threads_leave() \
+{ \
+ g_print ("unlocking: %s, %d\n", __FILE__, __LINE__); \
+ cp_gtk_print_current_thread (); \
+ gdk_threads_leave (); \
+ g_print ("unlocked: %s, %d\n", __FILE__, __LINE__); \
+ cp_gtk_print_current_thread (); \
}
#endif