/[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.10 by fitzsim, Thu Jul 24 22:04:49 2003 UTC revision 1.11 by fitzsim, Wed Aug 6 15:05:29 2003 UTC
# Line 48  struct event_hook_info Line 48  struct event_hook_info
48  {  {
49    jobject *peer_obj;    jobject *peer_obj;
50    int nwindows;    int nwindows;
51    GdkWindow ***windows;         /* array of pointers to (GdkWindow *) */    /* array of pointers to (GdkWindow *) */
52      GdkWindow ***windows;
53  };  };
54    
55  static jint  static jint
# Line 68  button_to_awt_mods (int button) Line 69  button_to_awt_mods (int button)
69  }  }
70    
71  static jint  static jint
72  state_to_awt_mods (int mods)  state_to_awt_mods (guint state)
73  {  {
74    jint result = 0;    jint result = 0;
75    
76    if (mods & (GDK_SHIFT_MASK | GDK_LOCK_MASK))    if (state & GDK_SHIFT_MASK)
77      result |= AWT_SHIFT_MASK;      result |= AWT_SHIFT_MASK;
78    if (mods & GDK_CONTROL_MASK)    if (state & GDK_CONTROL_MASK)
79      result |= AWT_CTRL_MASK;      result |= AWT_CTRL_MASK;
80      if (state & GDK_MOD1_MASK)
81        result |= AWT_ALT_MASK;
82        
83    return result;    return result;
84  }  }
85    
86    /* Modifier key events need special treatment.  In Sun's peer
87       implementation, when a modifier key is pressed, the KEY_PRESSED
88       event has that modifier in its modifiers list.  The corresponding
89       KEY_RELEASED event's modifier list does not contain the modifier.
90       For example, pressing and releasing the shift key will produce a
91       key press event with modifiers=Shift, and a key release event with
92       no modifiers.  GDK's key events behave in the exact opposite way,
93       so this translation code is needed. */
94    static jint
95    keyevent_state_to_awt_mods (GdkEvent *event)
96    {
97      jint result = 0;
98      guint state;
99    
100      if (event->type == GDK_KEY_PRESS)
101        {
102          state = event->key.state;
103    
104          if (event->key.keyval == GDK_Shift_L
105              || event->key.keyval == GDK_Shift_R)
106            result |= AWT_SHIFT_MASK;
107          else
108            {
109              if (state & GDK_SHIFT_MASK)
110                result |= AWT_SHIFT_MASK;
111            }
112    
113          if (event->key.keyval == GDK_Control_L
114              || event->key.keyval == GDK_Control_R)
115            result |= AWT_CTRL_MASK;
116          else
117            {
118              if (state & GDK_CONTROL_MASK)
119                result |= AWT_CTRL_MASK;
120            }
121    
122          if (event->key.keyval == GDK_Alt_L
123              || event->key.keyval == GDK_Alt_R)
124            result |= AWT_ALT_MASK;
125          else
126            {
127              if (state & GDK_MOD1_MASK)
128                result |= AWT_ALT_MASK;
129            }
130        }
131      else if (event->type == GDK_KEY_RELEASE)
132        {
133          state = event->key.state;
134    
135          if (event->key.keyval != GDK_Shift_L
136              && event->key.keyval != GDK_Shift_R)
137            {
138              if (state & GDK_SHIFT_MASK)
139                result |= AWT_SHIFT_MASK;
140            }
141          if (event->key.keyval != GDK_Control_L
142              && event->key.keyval != GDK_Control_R)
143            {
144              if (state & GDK_CONTROL_MASK)
145                result |= AWT_CTRL_MASK;
146            }
147    
148          if (event->key.keyval != GDK_Alt_L
149              && event->key.keyval != GDK_Alt_R)
150            {
151              if (state & GDK_MOD1_MASK)
152                result |= AWT_ALT_MASK;
153            }
154        }
155    
156      return result;
157    }
158    
159    /* Get the first keyval in the keymap for this event's keycode.  The
160       first keyval corresponds roughly to Java's notion of a virtual
161       key.  Returns the uppercase version of the first keyval. */
162    static guint
163    get_first_keyval_from_keymap (GdkEvent *event)
164    {
165      guint keyval;
166      guint *keyvals;
167      gint n_entries;
168    
169      if (!gdk_keymap_get_entries_for_keycode (NULL,
170                                               event->key.hardware_keycode,
171                                               NULL,
172                                               &keyvals,
173                                               &n_entries))
174        {
175          g_warning ("No keyval found for hardware keycode %d\n",
176                     event->key.hardware_keycode);
177          /* Try to recover by using the keyval in the event structure. */
178          keyvals = &(event->key.keyval);
179        }
180      keyval = keyvals[0];
181      g_free (keyvals);
182    
183      return gdk_keyval_to_upper (keyval);
184    }
185    
186  #ifdef __GNUC__  #ifdef __GNUC__
187  __inline  __inline
188  #endif  #endif
189  static jint  static jint
190  keysym_to_awt_keycode (guint keyval)  keysym_to_awt_keycode (GdkEvent *event)
191  {  {
192    guint vk;    guint ukeyval;
193      guint state;
194    
195    vk = gdk_keyval_to_upper (keyval);    ukeyval = get_first_keyval_from_keymap (event);
196      state = event->key.state;
197    
198    if (vk >= 0x41 && vk <= 0x5A) /* VK_A through VK_Z */    /* VK_A through VK_Z */
199      return vk;    if (ukeyval >= GDK_A && ukeyval <= GDK_Z)
200        return ukeyval;
201    
202    if (vk >= 0x30 && vk <= 0x39) /* VK_0 through VK_9 */    /* VK_0 through VK_9 */
203      return vk;    if (ukeyval >= GDK_0 && ukeyval <= GDK_9)
204        return ukeyval;
205    
206    switch (vk)    switch (ukeyval)
207      {      {
208      case GDK_Alt_L:      case GDK_Return:
209      case GDK_Alt_R:      case GDK_KP_Enter:
210        return VK_ALT;        return VK_ENTER;
211      case GDK_BackSpace:      case GDK_BackSpace:
212        return VK_BACK_SPACE;        return VK_BACK_SPACE;
213        case GDK_Tab:
214          return VK_TAB;
215      case GDK_Cancel:      case GDK_Cancel:
216        return VK_CANCEL;        return VK_CANCEL;
     case GDK_Caps_Lock:  
       return VK_CAPS_LOCK;  
217      case GDK_Clear:      case GDK_Clear:
218        return VK_CLEAR;        return VK_CLEAR;
219      case GDK_bracketright:      case GDK_Shift_L:
220        return VK_CLOSE_BRACKET;      case GDK_Shift_R:
221      case GDK_comma:        return VK_SHIFT;
       return VK_COMMA;  
222      case GDK_Control_L:      case GDK_Control_L:
223      case GDK_Control_R:      case GDK_Control_R:
224        return VK_CONTROL;        return VK_CONTROL;
225        case GDK_Alt_L:
226        case GDK_Alt_R:
227          return VK_ALT;
228        case GDK_Pause:
229          return VK_PAUSE;
230        case GDK_Caps_Lock:
231          return VK_CAPS_LOCK;
232        case GDK_Escape:
233          return VK_ESCAPE;
234        case GDK_space:
235          return VK_SPACE;
236        case GDK_KP_Page_Up:
237          /* For keys on the numeric keypad, the JVM produces one of two
238             virtual keys, depending on the num lock state. */
239          if (state & GDK_MOD2_MASK)
240            return VK_NUMPAD9;
241          else
242            return VK_PAGE_UP;
243        case GDK_Page_Up:
244          return VK_PAGE_UP;
245        case GDK_KP_Page_Down:
246          if (state & GDK_MOD2_MASK)
247            return VK_NUMPAD3;
248          else
249            return VK_PAGE_DOWN;
250        case GDK_Page_Down:
251          return VK_PAGE_DOWN;
252        case GDK_KP_End:
253          if (state & GDK_MOD2_MASK)
254            return VK_NUMPAD1;
255          else
256            return VK_END;
257        case GDK_End:
258          return VK_END;
259        case GDK_KP_Home:
260          if (state & GDK_MOD2_MASK)
261            return VK_NUMPAD7;
262          else
263            return VK_HOME;
264        case GDK_Home:
265          return VK_HOME;
266        case GDK_KP_Begin:
267          if (state & GDK_MOD2_MASK)
268            return VK_NUMPAD5;
269          else
270            return VK_UNDEFINED;
271        case GDK_Left:
272          return VK_LEFT;
273        case GDK_Up:
274          return VK_UP;
275        case GDK_Right:
276          return VK_RIGHT;
277        case GDK_Down:
278          return VK_DOWN;
279        case GDK_comma:
280          return VK_COMMA;
281        case GDK_minus:
282          return VK_MINUS;
283        case GDK_period:
284          return VK_PERIOD;
285        case GDK_slash:
286          return VK_SLASH;
287          /*
288          return VK_0;
289          return VK_1;
290          return VK_2;
291          return VK_3;
292          return VK_4;
293          return VK_5;
294          return VK_6;
295          return VK_7;
296          return VK_8;
297          return VK_9;
298          */
299        case GDK_semicolon:
300          return VK_SEMICOLON;
301        case GDK_equal:
302          return VK_EQUALS;
303          /*
304          return VK_A;
305          return VK_B;
306          return VK_C;
307          return VK_D;
308          return VK_E;
309          return VK_F;
310          return VK_G;
311          return VK_H;
312          return VK_I;
313          return VK_J;
314          return VK_K;
315          return VK_L;
316          return VK_M;
317          return VK_N;
318          return VK_O;
319          return VK_P;
320          return VK_Q;
321          return VK_R;
322          return VK_S;
323          return VK_T;
324          return VK_U;
325          return VK_V;
326          return VK_W;
327          return VK_X;
328          return VK_Y;
329          return VK_Z;
330          */
331        case GDK_bracketleft:
332          return VK_OPEN_BRACKET;
333        case GDK_backslash:
334          return VK_BACK_SLASH;
335        case GDK_bracketright:
336          return VK_CLOSE_BRACKET;
337        case GDK_KP_0:
338          return VK_NUMPAD0;
339        case GDK_KP_1:
340          return VK_NUMPAD1;
341        case GDK_KP_2:
342          return VK_NUMPAD2;
343        case GDK_KP_3:
344          return VK_NUMPAD3;
345        case GDK_KP_4:
346          return VK_NUMPAD4;
347        case GDK_KP_5:
348          return VK_NUMPAD5;
349        case GDK_KP_6:
350          return VK_NUMPAD6;
351        case GDK_KP_7:
352          return VK_NUMPAD7;
353        case GDK_KP_8:
354          return VK_NUMPAD8;
355        case GDK_KP_9:
356          return VK_NUMPAD9;
357        case GDK_KP_Multiply:
358          return VK_MULTIPLY;
359        case GDK_KP_Add:
360          return VK_ADD;
361          /*
362          return VK_SEPARATER;
363          */
364        case GDK_KP_Separator:
365          return VK_SEPARATOR;
366        case GDK_KP_Subtract:
367          return VK_SUBTRACT;
368      case GDK_KP_Decimal:      case GDK_KP_Decimal:
369        return VK_DECIMAL;        return VK_DECIMAL;
     case GDK_Delete:  
       return VK_DELETE;  
370      case GDK_KP_Divide:      case GDK_KP_Divide:
371        return VK_DIVIDE;        return VK_DIVIDE;
372      case GDK_Down:      case GDK_KP_Delete:
373        return VK_DOWN;        if (state & GDK_MOD2_MASK)
374      case GDK_End:          return VK_DECIMAL;
375        return VK_END;        else
376      case GDK_Return:          return VK_DELETE;
377        return VK_ENTER;      case GDK_Delete:
378      case GDK_Escape:        return VK_DELETE;
379        return VK_ESCAPE;      case GDK_Num_Lock:
380          return VK_NUM_LOCK;
381        case GDK_Scroll_Lock:
382          return VK_SCROLL_LOCK;
383      case GDK_F1:      case GDK_F1:
384        return VK_F1;        return VK_F1;
385      case GDK_F2:      case GDK_F2:
# Line 154  keysym_to_awt_keycode (guint keyval) Line 404  keysym_to_awt_keycode (guint keyval)
404        return VK_F11;        return VK_F11;
405      case GDK_F12:      case GDK_F12:
406        return VK_F12;        return VK_F12;
407      case GDK_Help:      case GDK_F13:
408        return VK_HELP;        return VK_F13;
409      case GDK_Home:      case GDK_F14:
410        return VK_HOME;        return VK_F14;
411        case GDK_F15:
412          return VK_F15;
413        case GDK_F16:
414          return VK_F16;
415        case GDK_F17:
416          return VK_F17;
417        case GDK_F18:
418          return VK_F18;
419        case GDK_F19:
420          return VK_F19;
421        case GDK_F20:
422          return VK_F20;
423        case GDK_F21:
424          return VK_F21;
425        case GDK_F22:
426          return VK_F22;
427        case GDK_F23:
428          return VK_F23;
429        case GDK_F24:
430          return VK_F24;
431        case GDK_Print:
432          return VK_PRINTSCREEN;
433        case GDK_KP_Insert:
434          if (state & GDK_MOD2_MASK)
435            return VK_NUMPAD0;
436          else
437            return VK_INSERT;
438      case GDK_Insert:      case GDK_Insert:
439        return VK_INSERT;        return VK_INSERT;
440        case GDK_Help:
441          return VK_HELP;
442        case GDK_Meta_L:
443        case GDK_Meta_R:
444          return VK_META;
445        case GDK_grave:
446          return VK_BACK_QUOTE;
447        case GDK_apostrophe:
448          return VK_QUOTE;
449        case GDK_KP_Up:
450          if (state & GDK_MOD2_MASK)
451            return VK_NUMPAD8;
452          else
453            return VK_KP_UP;
454        case GDK_KP_Down:
455          if (state & GDK_MOD2_MASK)
456            return VK_NUMPAD2;
457          else
458            return VK_KP_DOWN;
459        case GDK_KP_Left:
460          if (state & GDK_MOD2_MASK)
461            return VK_NUMPAD4;
462          else
463            return VK_KP_LEFT;
464        case GDK_KP_Right:
465          if (state & GDK_MOD2_MASK)
466            return VK_NUMPAD6;
467          else
468            return VK_KP_RIGHT;
469        case GDK_dead_grave:
470          return VK_DEAD_GRAVE;
471        case GDK_dead_acute:
472          return VK_DEAD_ACUTE;
473        case GDK_dead_circumflex:
474          return VK_DEAD_CIRCUMFLEX;
475        case GDK_dead_tilde:
476          return VK_DEAD_TILDE;
477        case GDK_dead_macron:
478          return VK_DEAD_MACRON;
479        case GDK_dead_breve:
480          return VK_DEAD_BREVE;
481        case GDK_dead_abovedot:
482          return VK_DEAD_ABOVEDOT;
483        case GDK_dead_diaeresis:
484          return VK_DEAD_DIAERESIS;
485        case GDK_dead_abovering:
486          return VK_DEAD_ABOVERING;
487        case GDK_dead_doubleacute:
488          return VK_DEAD_DOUBLEACUTE;
489        case GDK_dead_caron:
490          return VK_DEAD_CARON;
491        case GDK_dead_cedilla:
492          return VK_DEAD_CEDILLA;
493        case GDK_dead_ogonek:
494          return VK_DEAD_OGONEK;
495        case GDK_dead_iota:
496          return VK_DEAD_IOTA;
497        case GDK_dead_voiced_sound:
498          return VK_DEAD_VOICED_SOUND;
499        case GDK_dead_semivoiced_sound:
500          return VK_DEAD_SEMIVOICED_SOUND;
501        case GDK_ampersand:
502          return VK_AMPERSAND;
503        case GDK_asterisk:
504          return VK_ASTERISK;
505        case GDK_quotedbl:
506          return VK_QUOTEDBL;
507        case GDK_less:
508          return VK_LESS;
509        case GDK_greater:
510          return VK_GREATER;
511        case GDK_braceleft:
512          return VK_BRACELEFT;
513        case GDK_braceright:
514          return VK_BRACERIGHT;
515        case GDK_at:
516          return VK_AT;
517        case GDK_colon:
518          return VK_COLON;
519        case GDK_asciicircum:
520          return VK_CIRCUMFLEX;
521        case GDK_dollar:
522          return VK_DOLLAR;
523        case GDK_EuroSign:
524          return VK_EURO_SIGN;
525        case GDK_exclam:
526          return VK_EXCLAMATION_MARK;
527        case GDK_exclamdown:
528          return VK_INVERTED_EXCLAMATION_MARK;
529        case GDK_parenleft:
530          return VK_LEFT_PARENTHESIS;
531        case GDK_numbersign:
532          return VK_NUMBER_SIGN;
533        case GDK_plus:
534          return VK_PLUS;
535        case GDK_parenright:
536          return VK_RIGHT_PARENTHESIS;
537        case GDK_underscore:
538          return VK_UNDERSCORE;
539          /*
540          return VK_FINAL;
541          return VK_CONVERT;
542          return VK_NONCONVERT;
543          return VK_ACCEPT;
544          */
545        case GDK_Mode_switch:
546          return VK_MODECHANGE;
547          /*
548          return VK_KANA;
549          */
550      case GDK_Kanji:      case GDK_Kanji:
551        return VK_KANJI;        return VK_KANJI;
552      case GDK_Left:        /*
553        return VK_LEFT;        return VK_ALPHANUMERIC;
554          */
555        case GDK_Katakana:
556          return VK_KATAKANA;
557        case GDK_Hiragana:
558          return VK_HIRAGANA;
559          /*
560          return VK_FULL_WIDTH;
561          return VK_HALF_WIDTH;
562          return VK_ROMAN_CHARACTERS;
563          return VK_ALL_CANDIDATES;
564          */
565        case GDK_PreviousCandidate:
566          return VK_PREVIOUS_CANDIDATE;
567        case GDK_Codeinput:
568          return VK_CODE_INPUT;
569          /*
570          return VK_JAPANESE_KATAKANA;
571          return VK_JAPANESE_HIRAGANA;
572          return VK_JAPANESE_ROMAN;
573          */
574        case GDK_Kana_Lock:
575          return VK_KANA_LOCK;
576          /*
577          return VK_INPUT_METHOD_ON_OFF;
578          return VK_CUT;
579          return VK_COPY;
580          return VK_PASTE;
581          return VK_UNDO;
582          return VK_AGAIN;
583          return VK_FIND;
584          return VK_PROPS;
585          return VK_STOP;
586          return VK_COMPOSE;
587          return VK_ALT_GRAPH;
588          */
589        default:
590          return VK_UNDEFINED;
591        }
592    }
593    
594    static jint
595    keysym_to_awt_keylocation (GdkEvent *event)
596    {
597      guint ukeyval;
598    
599      ukeyval = get_first_keyval_from_keymap (event);
600    
601      /* VK_A through VK_Z */
602      if (ukeyval >= GDK_A && ukeyval <= GDK_Z)
603        return AWT_KEY_LOCATION_STANDARD;
604    
605      /* VK_0 through VK_9 */
606      if (ukeyval >= GDK_0 && ukeyval <= GDK_9)
607        return AWT_KEY_LOCATION_STANDARD;
608    
609      switch (ukeyval)
610        {
611        case GDK_Shift_L:
612        case GDK_Control_L:
613        case GDK_Alt_L:
614      case GDK_Meta_L:      case GDK_Meta_L:
615          return AWT_KEY_LOCATION_LEFT;
616    
617        case GDK_Shift_R:
618        case GDK_Control_R:
619        case GDK_Alt_R:
620      case GDK_Meta_R:      case GDK_Meta_R:
621        return VK_META;        return AWT_KEY_LOCATION_RIGHT;
622      case GDK_KP_Multiply:  
623        return VK_MULTIPLY;      case GDK_Return:
624      case GDK_Num_Lock:      case GDK_BackSpace:
625        return VK_NUM_LOCK;      case GDK_Tab:
626        case GDK_Cancel:
627        case GDK_Clear:
628        case GDK_Pause:
629        case GDK_Caps_Lock:
630        case GDK_Escape:
631        case GDK_space:
632        case GDK_Page_Up:
633        case GDK_Page_Down:
634        case GDK_End:
635        case GDK_Home:
636        case GDK_Left:
637        case GDK_Up:
638        case GDK_Right:
639        case GDK_Down:
640        case GDK_comma:
641        case GDK_minus:
642        case GDK_period:
643        case GDK_slash:
644        case GDK_semicolon:
645        case GDK_equal:
646        case GDK_bracketleft:
647        case GDK_backslash:
648        case GDK_bracketright:
649        case GDK_Delete:
650        case GDK_Scroll_Lock:
651        case GDK_F1:
652        case GDK_F2:
653        case GDK_F3:
654        case GDK_F4:
655        case GDK_F5:
656        case GDK_F6:
657        case GDK_F7:
658        case GDK_F8:
659        case GDK_F9:
660        case GDK_F10:
661        case GDK_F11:
662        case GDK_F12:
663        case GDK_F13:
664        case GDK_F14:
665        case GDK_F15:
666        case GDK_F16:
667        case GDK_F17:
668        case GDK_F18:
669        case GDK_F19:
670        case GDK_F20:
671        case GDK_F21:
672        case GDK_F22:
673        case GDK_F23:
674        case GDK_F24:
675        case GDK_Print:
676        case GDK_Insert:
677        case GDK_Help:
678        case GDK_grave:
679        case GDK_apostrophe:
680        case GDK_dead_grave:
681        case GDK_dead_acute:
682        case GDK_dead_circumflex:
683        case GDK_dead_tilde:
684        case GDK_dead_macron:
685        case GDK_dead_breve:
686        case GDK_dead_abovedot:
687        case GDK_dead_diaeresis:
688        case GDK_dead_abovering:
689        case GDK_dead_doubleacute:
690        case GDK_dead_caron:
691        case GDK_dead_cedilla:
692        case GDK_dead_ogonek:
693        case GDK_dead_iota:
694        case GDK_dead_voiced_sound:
695        case GDK_dead_semivoiced_sound:
696        case GDK_ampersand:
697        case GDK_asterisk:
698        case GDK_quotedbl:
699        case GDK_less:
700        case GDK_greater:
701        case GDK_braceleft:
702        case GDK_braceright:
703        case GDK_at:
704        case GDK_colon:
705        case GDK_asciicircum:
706        case GDK_dollar:
707        case GDK_EuroSign:
708        case GDK_exclam:
709        case GDK_exclamdown:
710        case GDK_parenleft:
711        case GDK_numbersign:
712        case GDK_plus:
713        case GDK_parenright:
714        case GDK_underscore:
715        case GDK_Mode_switch:
716        case GDK_Kanji:
717        case GDK_Katakana:
718        case GDK_Hiragana:
719        case GDK_PreviousCandidate:
720        case GDK_Codeinput:
721        case GDK_Kana_Lock:
722          return AWT_KEY_LOCATION_STANDARD;
723    
724        case GDK_KP_Enter:
725        case GDK_KP_Page_Up:
726        case GDK_KP_Page_Down:
727        case GDK_KP_End:
728        case GDK_KP_Home:
729        case GDK_KP_Begin:
730      case GDK_KP_0:      case GDK_KP_0:
       return VK_NUMPAD0;  
731      case GDK_KP_1:      case GDK_KP_1:
       return VK_NUMPAD1;  
732      case GDK_KP_2:      case GDK_KP_2:
       return VK_NUMPAD2;  
733      case GDK_KP_3:      case GDK_KP_3:
       return VK_NUMPAD3;  
734      case GDK_KP_4:      case GDK_KP_4:
       return VK_NUMPAD4;  
735      case GDK_KP_5:      case GDK_KP_5:
       return VK_NUMPAD5;  
736      case GDK_KP_6:      case GDK_KP_6:
       return VK_NUMPAD6;  
737      case GDK_KP_7:      case GDK_KP_7:
       return VK_NUMPAD7;  
738      case GDK_KP_8:      case GDK_KP_8:
       return VK_NUMPAD8;  
739      case GDK_KP_9:      case GDK_KP_9:
740        return VK_NUMPAD9;      case GDK_KP_Multiply:
741      case GDK_bracketleft:      case GDK_KP_Add:
       return VK_OPEN_BRACKET;  
     case GDK_Page_Down:  
       return VK_PAGE_DOWN;  
     case GDK_Page_Up:  
       return VK_PAGE_UP;  
     case GDK_Pause:  
       return VK_PAUSE;  
     case GDK_period:  
       return VK_PERIOD;  
     case GDK_Print:  
       return VK_PRINTSCREEN;  
     case GDK_quoteright:  
       return VK_QUOTE;  
     case GDK_Right:  
       return VK_RIGHT;  
     case GDK_Scroll_Lock:  
       return VK_SCROLL_LOCK;  
     case GDK_semicolon:  
       return VK_SEMICOLON;  
742      case GDK_KP_Separator:      case GDK_KP_Separator:
       return VK_SEPARATOR;  
     case GDK_Shift_L:  
     case GDK_Shift_R:  
       return VK_SHIFT;  
     case GDK_slash:  
       return VK_SLASH;  
     case GDK_space:  
       return VK_SPACE;  
743      case GDK_KP_Subtract:      case GDK_KP_Subtract:
744        return VK_SUBTRACT;      case GDK_KP_Decimal:
745        case GDK_KP_Divide:
746        case GDK_KP_Delete:
747        case GDK_Num_Lock:
748        case GDK_KP_Insert:
749        case GDK_KP_Up:
750        case GDK_KP_Down:
751        case GDK_KP_Left:
752        case GDK_KP_Right:
753          return AWT_KEY_LOCATION_NUMPAD;
754    
755        default:
756          return AWT_KEY_LOCATION_UNKNOWN;
757        }
758    }
759    
760    static jchar
761    keyevent_to_awt_keychar (GdkEvent *event)
762    {
763      if (event->key.length > 0)
764        {
765          /* Translate GDK carriage return to Java linefeed. */
766          if (event->key.string[0] == 13)
767            return VK_ENTER;
768          else
769            return event->key.string[0];
770        }
771      else
772        {
773          switch (event->key.keyval)
774            {
775            case GDK_BackSpace:
776              return VK_BACK_SPACE;
777      case GDK_Tab:      case GDK_Tab:
778        return VK_TAB;        return VK_TAB;
779      case GDK_Up:          case GDK_Delete:
780        return VK_UP;          case GDK_KP_Delete:
781              return VK_DELETE;
782      default:      default:
783        return VK_UNDEFINED;            return AWT_KEY_CHAR_UNDEFINED;
784            }
785      }      }
786  }  }
787    
# Line 237  keysym_to_awt_keycode (guint keyval) Line 790  keysym_to_awt_keycode (guint keyval)
790     GtkIMContext "commit" signals, but that do trigger Java KEY_TYPED     GtkIMContext "commit" signals, but that do trigger Java KEY_TYPED
791     events. */     events. */
792  static int  static int
793  generates_key_typed_event (guint keyval, GtkWidget *source)  generates_key_typed_event (GdkEvent *event, GtkWidget *source)
794  {  {
795    return (keyval == GDK_BackSpace    guint keyval;
796    
797      if (!GTK_IS_ENTRY (source)
798          && !GTK_IS_TEXT_VIEW (source))
799        return event->key.length ? 1 : 0;
800    
801      keyval = event->key.keyval;
802    
803      return (keyval == GDK_Escape
804              || keyval == GDK_BackSpace
805            || keyval == GDK_Delete            || keyval == GDK_Delete
806              || keyval == GDK_KP_Delete
807            || keyval == GDK_Return            || keyval == GDK_Return
808              || keyval == GDK_KP_Enter
809            || (keyval == GDK_Tab            || (keyval == GDK_Tab
810                && GTK_IS_TEXT_VIEW(source))) ? 1 : 0;                && GTK_IS_TEXT_VIEW(source))) ? 1 : 0;
811  }  }
# Line 495  awt_event_handler (GdkEvent *event) Line 1059  awt_event_handler (GdkEvent *event)
1059                                    NULL,                                    NULL,
1060                                    (guchar **)&obj_ptr);                                    (guchar **)&obj_ptr);
1061    
                 /*          if (grab  && GTK_WIDGET_HAS_DEFAULT (widget) ) */  
                 /*            { */  
1062                  (*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr,                  (*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr,
1063                                              postKeyEventID,                                              postKeyEventID,
1064                                              (jint) AWT_KEY_PRESSED,                                              (jint) AWT_KEY_PRESSED,
1065                                              (jlong) event->key.time,                                              (jlong) event->key.time,
1066                                              state_to_awt_mods (event->key.state),                               keyevent_state_to_awt_mods (event),
1067                                              keysym_to_awt_keycode (event->key.keyval),                               keysym_to_awt_keycode (event),
1068                                              (jchar) (event->key.length) ?                               keyevent_to_awt_keychar (event),
1069                                              event->key.string[0] :                               keysym_to_awt_keylocation (event));
                                             AWT_KEY_CHAR_UNDEFINED);  
1070    
1071                  if (generates_key_typed_event (event->key.keyval, window->focus_widget))                  if (generates_key_typed_event (event, window->focus_widget))
1072                    (*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr,                    (*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr,
1073                                                postKeyEventID,                                                postKeyEventID,
1074                                                (jint) AWT_KEY_TYPED,                                                (jint) AWT_KEY_TYPED,
1075                                                (jlong) event->key.time,                                                (jlong) event->key.time,
1076                                                state_to_awt_mods (event->key.state),                                                state_to_awt_mods (event->key.state),
1077                                                VK_UNDEFINED,                                                VK_UNDEFINED,
1078                                                (jchar) (event->key.length) ?                                                keyevent_to_awt_keychar (event),
1079                                                event->key.string[0] :                                                AWT_KEY_LOCATION_UNKNOWN);
                                               AWT_KEY_CHAR_UNDEFINED);  
1080                }                }
1081            }            }
1082            break;            break;
# Line 558  awt_event_handler (GdkEvent *event) Line 1118  awt_event_handler (GdkEvent *event)
1118                                              postKeyEventID,                                              postKeyEventID,
1119                                              (jint) AWT_KEY_RELEASED,                                              (jint) AWT_KEY_RELEASED,
1120                                              (jlong) event->key.time,                                              (jlong) event->key.time,
1121                                            state_to_awt_mods (event->key.state),                               keyevent_state_to_awt_mods (event),
1122                                       keysym_to_awt_keycode (event->key.keyval),                               keysym_to_awt_keycode (event),
1123                                              (jchar) (event->key.length) ?                               keyevent_to_awt_keychar (event),
1124                                              event->key.string[0] :                               keysym_to_awt_keylocation (event));
                                             AWT_KEY_CHAR_UNDEFINED);  
1125                }                }
1126            }            }
1127            break;            break;

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

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