aboutsummaryrefslogtreecommitdiff
path: root/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c')
-rw-r--r--libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c109
1 files changed, 69 insertions, 40 deletions
diff --git a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
index 65f64e04eea..8d3dda93ad8 100644
--- a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
+++ b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
@@ -58,11 +58,11 @@ button_to_awt_mods (int button)
switch (button)
{
case 1:
- return AWT_BUTTON1_DOWN_MASK;
+ return AWT_BUTTON1_MASK;
case 2:
- return AWT_BUTTON2_DOWN_MASK;
+ return AWT_BUTTON2_MASK;
case 3:
- return AWT_BUTTON3_DOWN_MASK;
+ return AWT_BUTTON3_MASK;
}
return 0;
@@ -883,7 +883,8 @@ pre_event_handler (GtkWidget *widget, GdkEvent *event, jobject peer)
switch (event->type)
{
case GDK_BUTTON_PRESS:
- (*gdk_env)->CallVoidMethod (gdk_env, peer,
+ gdk_threads_leave ();
+ (*gdk_env())->CallVoidMethod (gdk_env(), peer,
postMouseEventID,
AWT_MOUSE_PRESSED,
(jlong)event->button.time,
@@ -894,13 +895,15 @@ pre_event_handler (GtkWidget *widget, GdkEvent *event, jobject peer)
click_count,
(event->button.button == 3) ? JNI_TRUE :
JNI_FALSE);
+ gdk_threads_enter ();
hasBeenDragged = FALSE;
break;
case GDK_BUTTON_RELEASE:
{
int width, height;
- (*gdk_env)->CallVoidMethod (gdk_env, peer,
+ gdk_threads_leave ();
+ (*gdk_env())->CallVoidMethod (gdk_env(), peer,
postMouseEventID,
AWT_MOUSE_RELEASED,
(jlong)event->button.time,
@@ -910,6 +913,7 @@ pre_event_handler (GtkWidget *widget, GdkEvent *event, jobject peer)
(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
@@ -921,7 +925,8 @@ pre_event_handler (GtkWidget *widget, GdkEvent *event, jobject peer)
&& event->button.x <= width
&& event->button.y <= height)
{
- (*gdk_env)->CallVoidMethod (gdk_env, peer,
+ gdk_threads_leave ();
+ (*gdk_env())->CallVoidMethod (gdk_env(), peer,
postMouseEventID,
AWT_MOUSE_CLICKED,
(jlong)event->button.time,
@@ -931,6 +936,7 @@ pre_event_handler (GtkWidget *widget, GdkEvent *event, jobject peer)
(jint)event->button.y,
click_count,
JNI_FALSE);
+ gdk_threads_enter ();
}
}
break;
@@ -941,7 +947,8 @@ pre_event_handler (GtkWidget *widget, GdkEvent *event, jobject peer)
| GDK_BUTTON4_MASK
| GDK_BUTTON5_MASK))
{
- (*gdk_env)->CallVoidMethod (gdk_env, peer,
+ gdk_threads_leave ();
+ (*gdk_env())->CallVoidMethod (gdk_env(), peer,
postMouseEventID,
AWT_MOUSE_DRAGGED,
(jlong)event->motion.time,
@@ -950,44 +957,58 @@ pre_event_handler (GtkWidget *widget, GdkEvent *event, jobject peer)
(jint)event->motion.y,
0,
JNI_FALSE);
+ gdk_threads_enter ();
hasBeenDragged = TRUE;
}
else
- (*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_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_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_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_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_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:
{
@@ -1001,7 +1022,7 @@ pre_event_handler (GtkWidget *widget, GdkEvent *event, jobject peer)
returns. */
gdk_threads_leave ();
- (*gdk_env)->CallVoidMethod (gdk_env, peer,
+ (*gdk_env())->CallVoidMethod (gdk_env(), peer,
postConfigureEventID,
(jint) event->configure.x,
(jint) event->configure.y,
@@ -1012,20 +1033,24 @@ pre_event_handler (GtkWidget *widget, GdkEvent *event, jobject peer)
}
break;
case GDK_EXPOSE:
- (*gdk_env)->CallVoidMethod (gdk_env, peer,
+ 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_env)->CallVoidMethod (gdk_env, peer,
+ 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))
@@ -1033,7 +1058,8 @@ pre_event_handler (GtkWidget *widget, GdkEvent *event, jobject peer)
/* 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_env)->CallVoidMethod (gdk_env, peer,
+ gdk_threads_leave ();
+ (*gdk_env())->CallVoidMethod (gdk_env(), peer,
postKeyEventID,
(jint) AWT_KEY_PRESSED,
(jlong) event->key.time,
@@ -1041,6 +1067,7 @@ pre_event_handler (GtkWidget *widget, GdkEvent *event, jobject peer)
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
@@ -1054,7 +1081,8 @@ pre_event_handler (GtkWidget *widget, GdkEvent *event, jobject peer)
case GDK_KEY_RELEASE:
if (GTK_IS_WINDOW (widget))
{
- (*gdk_env)->CallVoidMethod (gdk_env, peer,
+ gdk_threads_leave ();
+ (*gdk_env())->CallVoidMethod (gdk_env(), peer,
postKeyEventID,
(jint) AWT_KEY_RELEASED,
(jlong) event->key.time,
@@ -1062,6 +1090,7 @@ pre_event_handler (GtkWidget *widget, GdkEvent *event, jobject peer)
keysym_to_awt_keycode (event),
keyevent_to_awt_keychar (event),
keysym_to_awt_keylocation (event));
+ gdk_threads_enter ();
return TRUE;
}
else
@@ -1135,13 +1164,13 @@ void connect_awt_hook_cb (GtkWidget *widget __attribute__((unused)),
{
void *ptr;
- ptr = NSA_GET_PTR (gdk_env, peer);
+ ptr = NSA_GET_PTR (gdk_env(), peer);
- connect_awt_hook (gdk_env, peer, 1, GTK_WIDGET (ptr)->window);
+ connect_awt_hook (gdk_env(), peer, 1, GTK_WIDGET (ptr)->window);
gdk_threads_leave ();
- (*gdk_env)->CallVoidMethod (gdk_env, peer, setCursorID);
+ (*gdk_env())->CallVoidMethod (gdk_env(), peer, setCursorID);
gdk_threads_enter ();
}