813 |
void |
void |
814 |
awt_event_handler (GdkEvent *event) |
awt_event_handler (GdkEvent *event) |
815 |
{ |
{ |
816 |
jobject *obj_ptr; |
jobject *event_obj_ptr; |
817 |
static guint32 button_click_time = 0; |
static guint32 button_click_time = 0; |
818 |
static GdkWindow *button_window = NULL; |
static GdkWindow *button_window = NULL; |
819 |
static guint button_number = -1; |
static guint button_number = -1; |
865 |
NULL, |
NULL, |
866 |
NULL, |
NULL, |
867 |
NULL, |
NULL, |
868 |
(guchar **)&obj_ptr)) |
(guchar **)&event_obj_ptr)) |
869 |
{ |
{ |
870 |
|
GtkWidget *event_widget; |
871 |
|
GtkWidget *grab_widget; |
872 |
|
jobject *grab_obj_ptr = NULL; |
873 |
|
void *ptr; |
874 |
|
|
875 |
|
/* Implement modality using GTK grabs. */ |
876 |
|
g_assert (global_gtk_window_group); |
877 |
|
if (global_gtk_window_group->grabs) |
878 |
|
{ |
879 |
|
grab_widget = global_gtk_window_group->grabs->data; |
880 |
|
g_assert (grab_widget); |
881 |
|
|
882 |
|
gdk_property_get (grab_widget->window, |
883 |
|
gdk_atom_intern ("_GNU_GTKAWT_ADDR", FALSE), |
884 |
|
gdk_atom_intern ("CARDINAL", FALSE), |
885 |
|
0, |
886 |
|
sizeof (jobject), |
887 |
|
FALSE, |
888 |
|
NULL, |
889 |
|
NULL, |
890 |
|
NULL, |
891 |
|
(guchar **)&grab_obj_ptr); |
892 |
|
|
893 |
|
ptr = NSA_GET_PTR (gdk_env, *event_obj_ptr); |
894 |
|
event_widget = GTK_WIDGET(ptr); |
895 |
|
|
896 |
|
if (GTK_WIDGET_IS_SENSITIVE (event_widget) && |
897 |
|
gtk_widget_is_ancestor (event_widget, grab_widget)) |
898 |
|
{ |
899 |
|
g_free (grab_obj_ptr); |
900 |
|
|
901 |
|
grab_obj_ptr = event_obj_ptr; |
902 |
|
} |
903 |
|
} |
904 |
|
else |
905 |
|
grab_obj_ptr = event_obj_ptr; |
906 |
|
|
907 |
switch (event->type) |
switch (event->type) |
908 |
{ |
{ |
909 |
case GDK_BUTTON_PRESS: |
case GDK_BUTTON_PRESS: |
910 |
(*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, postMouseEventID, |
(*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr, postMouseEventID, |
911 |
AWT_MOUSE_PRESSED, |
AWT_MOUSE_PRESSED, |
912 |
(jlong)event->button.time, |
(jlong)event->button.time, |
913 |
state_to_awt_mods (event->button.state) | |
state_to_awt_mods (event->button.state) | |
939 |
/* if (--grab_counter == 0) |
/* if (--grab_counter == 0) |
940 |
gdk_pointer_ungrab (event->button.time); |
gdk_pointer_ungrab (event->button.time); |
941 |
*/ |
*/ |
942 |
(*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, postMouseEventID, |
(*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr, |
943 |
|
postMouseEventID, |
944 |
AWT_MOUSE_RELEASED, |
AWT_MOUSE_RELEASED, |
945 |
(jlong)event->button.time, |
(jlong)event->button.time, |
946 |
state_to_awt_mods (event->button.state) | |
state_to_awt_mods (event->button.state) | |
956 |
&& event->button.y >= 0 |
&& event->button.y >= 0 |
957 |
&& event->button.x <= width |
&& event->button.x <= width |
958 |
&& event->button.y <= height) |
&& event->button.y <= height) |
959 |
(*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, postMouseEventID, |
(*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr, |
960 |
|
postMouseEventID, |
961 |
AWT_MOUSE_CLICKED, |
AWT_MOUSE_CLICKED, |
962 |
(jlong)event->button.time, |
(jlong)event->button.time, |
963 |
state_to_awt_mods (event->button.state) | |
state_to_awt_mods (event->button.state) | |
969 |
} |
} |
970 |
break; |
break; |
971 |
case GDK_MOTION_NOTIFY: |
case GDK_MOTION_NOTIFY: |
972 |
(*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, postMouseEventID, |
(*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr, postMouseEventID, |
973 |
AWT_MOUSE_MOVED, |
AWT_MOUSE_MOVED, |
974 |
(jlong)event->motion.time, |
(jlong)event->motion.time, |
975 |
state_to_awt_mods (event->motion.state), |
state_to_awt_mods (event->motion.state), |
983 |
| GDK_BUTTON4_MASK |
| GDK_BUTTON4_MASK |
984 |
| GDK_BUTTON5_MASK)) |
| GDK_BUTTON5_MASK)) |
985 |
{ |
{ |
986 |
(*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, postMouseEventID, |
(*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr, |
987 |
|
postMouseEventID, |
988 |
AWT_MOUSE_DRAGGED, |
AWT_MOUSE_DRAGGED, |
989 |
(jlong)event->motion.time, |
(jlong)event->motion.time, |
990 |
state_to_awt_mods (event->motion.state), |
state_to_awt_mods (event->motion.state), |
994 |
} |
} |
995 |
break; |
break; |
996 |
case GDK_ENTER_NOTIFY: |
case GDK_ENTER_NOTIFY: |
997 |
(*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, postMouseEventID, |
(*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr, postMouseEventID, |
998 |
AWT_MOUSE_ENTERED, |
AWT_MOUSE_ENTERED, |
999 |
(jlong)event->crossing.time, |
(jlong)event->crossing.time, |
1000 |
state_to_awt_mods (event->crossing.state), |
state_to_awt_mods (event->crossing.state), |
1004 |
break; |
break; |
1005 |
case GDK_LEAVE_NOTIFY: |
case GDK_LEAVE_NOTIFY: |
1006 |
if (event->crossing.mode == GDK_CROSSING_NORMAL) |
if (event->crossing.mode == GDK_CROSSING_NORMAL) |
1007 |
(*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, postMouseEventID, |
(*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr, |
1008 |
|
postMouseEventID, |
1009 |
AWT_MOUSE_EXITED, |
AWT_MOUSE_EXITED, |
1010 |
(jlong)event->crossing.time, |
(jlong)event->crossing.time, |
1011 |
state_to_awt_mods (event->crossing.state), |
state_to_awt_mods (event->crossing.state), |
1046 |
bottom = r.height - h - y; |
bottom = r.height - h - y; |
1047 |
right = r.width - w - x; |
right = r.width - w - x; |
1048 |
|
|
1049 |
(*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, |
(*gdk_env)->CallVoidMethod (gdk_env, *event_obj_ptr, |
1050 |
postConfigureEventID, |
postConfigureEventID, |
1051 |
(jint) event->configure.x, |
(jint) event->configure.x, |
1052 |
(jint) event->configure.y, |
(jint) event->configure.y, |
1062 |
break; |
break; |
1063 |
case GDK_EXPOSE: |
case GDK_EXPOSE: |
1064 |
{ |
{ |
1065 |
(*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, |
(*gdk_env)->CallVoidMethod (gdk_env, *event_obj_ptr, |
1066 |
postExposeEventID, |
postExposeEventID, |
1067 |
(jint)event->expose.area.x, |
(jint)event->expose.area.x, |
1068 |
(jint)event->expose.area.y, |
(jint)event->expose.area.y, |
1107 |
NULL, |
NULL, |
1108 |
NULL, |
NULL, |
1109 |
NULL, |
NULL, |
1110 |
(guchar **)&obj_ptr); |
(guchar **)&grab_obj_ptr); |
1111 |
|
|
1112 |
(*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, |
(*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr, |
1113 |
postKeyEventID, |
postKeyEventID, |
1114 |
(jint) AWT_KEY_PRESSED, |
(jint) AWT_KEY_PRESSED, |
1115 |
(jlong) event->key.time, |
(jlong) event->key.time, |
1119 |
keysym_to_awt_keylocation (event)); |
keysym_to_awt_keylocation (event)); |
1120 |
|
|
1121 |
if (generates_key_typed_event (event, window->focus_widget)) |
if (generates_key_typed_event (event, window->focus_widget)) |
1122 |
(*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, |
(*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr, |
1123 |
postKeyEventID, |
postKeyEventID, |
1124 |
(jint) AWT_KEY_TYPED, |
(jint) AWT_KEY_TYPED, |
1125 |
(jlong) event->key.time, |
(jlong) event->key.time, |
1126 |
state_to_awt_mods (event->key.state), |
state_to_awt_mods (event->key.state), |
1127 |
VK_UNDEFINED, |
VK_UNDEFINED, |
1128 |
keyevent_to_awt_keychar (event), |
keyevent_to_awt_keychar (event), |
1129 |
AWT_KEY_LOCATION_UNKNOWN); |
AWT_KEY_LOCATION_UNKNOWN); |
1162 |
NULL, |
NULL, |
1163 |
NULL, |
NULL, |
1164 |
NULL, |
NULL, |
1165 |
(guchar **)&obj_ptr); |
(guchar **)&grab_obj_ptr); |
1166 |
|
|
1167 |
(*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, |
(*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr, |
1168 |
postKeyEventID, |
postKeyEventID, |
1169 |
(jint) AWT_KEY_RELEASED, |
(jint) AWT_KEY_RELEASED, |
1170 |
(jlong) event->key.time, |
(jlong) event->key.time, |
1176 |
} |
} |
1177 |
break; |
break; |
1178 |
case GDK_FOCUS_CHANGE: |
case GDK_FOCUS_CHANGE: |
1179 |
(*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, |
(*gdk_env)->CallVoidMethod (gdk_env, *event_obj_ptr, |
1180 |
postFocusEventID, |
postFocusEventID, |
1181 |
(jint) (event->focus_change.in) ? |
(jint) (event->focus_change.in) ? |
1182 |
AWT_FOCUS_GAINED : AWT_FOCUS_LOST, |
AWT_FOCUS_GAINED : AWT_FOCUS_LOST, |
1185 |
default: |
default: |
1186 |
break; |
break; |
1187 |
} |
} |
1188 |
g_free (obj_ptr); |
g_free (event_obj_ptr); |
1189 |
} |
} |
1190 |
|
|
1191 |
gtk_main_do_event (event); |
gtk_main_do_event (event); |