232 |
} |
} |
233 |
} |
} |
234 |
|
|
235 |
|
/* Checks if keyval triggers a KEY_TYPED event on the source widget. |
236 |
|
This function identifies special keyvals that don't trigger |
237 |
|
GtkIMContext "commit" signals, but that do trigger Java KEY_TYPED |
238 |
|
events. */ |
239 |
static int |
static int |
240 |
generates_key_typed_event (guint keyval) |
generates_key_typed_event (guint keyval, GtkWidget *source) |
241 |
{ |
{ |
242 |
guint vk; |
return (keyval == GDK_BackSpace |
243 |
|
|| keyval == GDK_Delete |
244 |
vk = gdk_keyval_to_upper (keyval); |
|| keyval == GDK_Return |
245 |
|
|| (keyval == GDK_Tab |
246 |
if ((vk >= 0x20 && vk <= 0x7e) /* Most printable keysyms on a |
&& GTK_IS_TEXT_VIEW(source))) ? 1 : 0; |
|
standard US keyboard. */ |
|
|
|| (vk >= 0xFF9F && vk <= 0xFFB9) /* Numeric Keypad keysyms. */ |
|
|
|| vk == GDK_BackSpace |
|
|
|| vk == GDK_Delete |
|
|
|| vk == GDK_Return) |
|
|
return 1; |
|
|
else |
|
|
return 0; |
|
247 |
} |
} |
248 |
|
|
249 |
void |
void |
315 |
(jint)event->button.y, |
(jint)event->button.y, |
316 |
click_count, |
click_count, |
317 |
(event->button.button == 3) ? JNI_TRUE : |
(event->button.button == 3) ? JNI_TRUE : |
318 |
JNI_FALSE); |
JNI_FALSE); |
319 |
|
|
320 |
/* grab_counter++; |
/* grab_counter++; |
321 |
gdk_pointer_grab (event->any.window, |
gdk_pointer_grab (event->any.window, |
461 |
{ |
{ |
462 |
GtkWidget *widget; |
GtkWidget *widget; |
463 |
GtkWindow *window; |
GtkWindow *window; |
464 |
|
/* The window to which the Java peer is attached. */ |
465 |
|
GdkWindow *obj_window; |
466 |
|
|
467 |
gdk_window_get_user_data (event->any.window, (void **) &widget); |
gdk_window_get_user_data (event->any.window, (void **) &widget); |
468 |
|
|
475 |
&& window->focus_widget->window) |
&& window->focus_widget->window) |
476 |
{ |
{ |
477 |
gtk_widget_activate (window->focus_widget); |
gtk_widget_activate (window->focus_widget); |
478 |
gdk_property_get (window->focus_widget->window, |
|
479 |
|
/* TextArea peers are attached to the scrolled window |
480 |
|
that contains the GtkTextView, not to the text view |
481 |
|
itself. */ |
482 |
|
if (GTK_IS_TEXT_VIEW (window->focus_widget)) |
483 |
|
obj_window = gtk_widget_get_parent (window->focus_widget)->window; |
484 |
|
else |
485 |
|
obj_window = window->focus_widget->window; |
486 |
|
|
487 |
|
gdk_property_get (obj_window, |
488 |
gdk_atom_intern ("_GNU_GTKAWT_ADDR", FALSE), |
gdk_atom_intern ("_GNU_GTKAWT_ADDR", FALSE), |
489 |
gdk_atom_intern ("CARDINAL", FALSE), |
gdk_atom_intern ("CARDINAL", FALSE), |
490 |
0, |
0, |
494 |
NULL, |
NULL, |
495 |
NULL, |
NULL, |
496 |
(guchar **)&obj_ptr); |
(guchar **)&obj_ptr); |
497 |
|
|
498 |
/* if (grab && GTK_WIDGET_HAS_DEFAULT (widget) ) */ |
/* if (grab && GTK_WIDGET_HAS_DEFAULT (widget) ) */ |
499 |
/* { */ |
/* { */ |
500 |
(*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, |
(*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, |
501 |
postKeyEventID, |
postKeyEventID, |
502 |
(jint) AWT_KEY_PRESSED, |
(jint) AWT_KEY_PRESSED, |
503 |
(jlong) event->key.time, |
(jlong) event->key.time, |
504 |
state_to_awt_mods (event->key.state), |
state_to_awt_mods (event->key.state), |
505 |
keysym_to_awt_keycode (event->key.keyval), |
keysym_to_awt_keycode (event->key.keyval), |
506 |
(jchar) (event->key.length) ? |
(jchar) (event->key.length) ? |
507 |
event->key.string[0] : |
event->key.string[0] : |
508 |
AWT_KEY_CHAR_UNDEFINED); |
AWT_KEY_CHAR_UNDEFINED); |
509 |
|
|
510 |
if (event->key.length |
if (generates_key_typed_event (event->key.keyval, window->focus_widget)) |
|
&& generates_key_typed_event(event->key.keyval)) |
|
511 |
(*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, |
(*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, |
512 |
postKeyEventID, |
postKeyEventID, |
513 |
(jint) AWT_KEY_TYPED, |
(jint) AWT_KEY_TYPED, |
514 |
(jlong) event->key.time, |
(jlong) event->key.time, |
515 |
state_to_awt_mods (event->key.state), |
state_to_awt_mods (event->key.state), |
516 |
VK_UNDEFINED, |
VK_UNDEFINED, |
517 |
(jchar) event->key.string[0]); |
(jchar) (event->key.length) ? |
518 |
|
event->key.string[0] : |
519 |
|
AWT_KEY_CHAR_UNDEFINED); |
520 |
} |
} |
521 |
} |
} |
522 |
break; |
break; |
524 |
{ |
{ |
525 |
GtkWidget *widget; |
GtkWidget *widget; |
526 |
GtkWindow *window; |
GtkWindow *window; |
527 |
|
GdkWindow *obj_window; |
528 |
|
|
529 |
gdk_window_get_user_data (event->any.window, (void **) &widget); |
gdk_window_get_user_data (event->any.window, (void **) &widget); |
530 |
|
|
537 |
&& window->focus_widget->window) |
&& window->focus_widget->window) |
538 |
{ |
{ |
539 |
gtk_widget_activate (window->focus_widget); |
gtk_widget_activate (window->focus_widget); |
540 |
gdk_property_get (window->focus_widget->window, |
|
541 |
|
if (GTK_IS_TEXT_VIEW (window->focus_widget)) |
542 |
|
obj_window = gtk_widget_get_parent (window->focus_widget)->window; |
543 |
|
else |
544 |
|
obj_window = window->focus_widget->window; |
545 |
|
|
546 |
|
gdk_property_get (obj_window, |
547 |
gdk_atom_intern ("_GNU_GTKAWT_ADDR", FALSE), |
gdk_atom_intern ("_GNU_GTKAWT_ADDR", FALSE), |
548 |
gdk_atom_intern ("CARDINAL", FALSE), |
gdk_atom_intern ("CARDINAL", FALSE), |
549 |
0, |
0, |
620 |
obj = (jobject *) malloc (sizeof (jobject)); |
obj = (jobject *) malloc (sizeof (jobject)); |
621 |
*obj = (*env)->NewGlobalRef (env, peer_obj); |
*obj = (*env)->NewGlobalRef (env, peer_obj); |
622 |
//g_print("Connection obj %p\n", peer_obj); |
//g_print("Connection obj %p\n", peer_obj); |
623 |
|
|
624 |
va_start (ap, nwindows); |
va_start (ap, nwindows); |
625 |
{ |
{ |
626 |
int i; |
int i; |