/[classpath]/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
ViewVC logotype

Diff of /classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.9 by tromey, Tue Jul 8 04:06:59 2003 UTC revision 1.10 by fitzsim, Thu Jul 24 22:04:49 2003 UTC
# Line 232  keysym_to_awt_keycode (guint keyval) Line 232  keysym_to_awt_keycode (guint keyval)
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
# Line 319  awt_event_handler (GdkEvent *event) Line 315  awt_event_handler (GdkEvent *event)
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,
# Line 465  awt_event_handler (GdkEvent *event) Line 461  awt_event_handler (GdkEvent *event)
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    
# Line 477  awt_event_handler (GdkEvent *event) Line 475  awt_event_handler (GdkEvent *event)
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,
# Line 487  awt_event_handler (GdkEvent *event) Line 494  awt_event_handler (GdkEvent *event)
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;
# Line 516  awt_event_handler (GdkEvent *event) Line 524  awt_event_handler (GdkEvent *event)
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    
# Line 528  awt_event_handler (GdkEvent *event) Line 537  awt_event_handler (GdkEvent *event)
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,
# Line 605  connect_awt_hook (JNIEnv *env, jobject p Line 620  connect_awt_hook (JNIEnv *env, jobject p
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;

Legend:
Removed from v.1.9  
changed lines
  Added in v.1.10

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26