Index: trunk/src_plugins/hid_gtk/gui-output-events.c =================================================================== --- trunk/src_plugins/hid_gtk/gui-output-events.c (revision 6685) +++ trunk/src_plugins/hid_gtk/gui-output-events.c (revision 6686) @@ -137,48 +137,6 @@ return FALSE; } -/* Handle user keys in the output drawing area. */ -gboolean ghid_port_key_press_cb(GtkWidget * drawing_area, GdkEventKey * kev, gpointer data) -{ - if (ghid_is_modifier_key_sym(kev->keyval)) - return FALSE; - - if (kev->keyval <= 0xffff) { - GdkModifierType state = (GdkModifierType) (kev->state); - int slen, mods = 0; - static pcb_hid_cfg_keyseq_t *seq[32]; - static int seq_len = 0; - unsigned short int kv = kev->keyval; - - ghid_note_event_location(NULL); - - extern GdkModifierType ghid_glob_mask; - ghid_glob_mask = state; - - if (state & GDK_MOD1_MASK) mods |= PCB_M_Alt; - if (state & GDK_CONTROL_MASK) mods |= PCB_M_Ctrl; - if (state & GDK_SHIFT_MASK) { -/* TODO#3: this works only on US keyboard */ - static const char *ignore_shift = "~!@#$%^&*()_+{}|:\"<>?"; - if ((kv < 32) || (kv > 126) || (strchr(ignore_shift, kv) == NULL)) { - mods |= PCB_M_Shift; - if ((kv >= 'A') && (kv <= 'Z')) - kv = tolower(kv); - } - } - - if (kv == GDK_KEY_ISO_Left_Tab) kv = GDK_KEY_Tab; - slen = pcb_hid_cfg_keys_input(&ghid_keymap, mods, kv, seq, &seq_len); - if (slen > 0) { - ghid_port.view.has_entered = 1; - pcb_hid_cfg_keys_action(seq, slen); - return TRUE; - } - } - - return FALSE; -} - gboolean ghid_port_button_press_cb(GtkWidget * drawing_area, GdkEventButton * ev, gpointer data) { ModifierKeysState mk; Index: trunk/src_plugins/lib_gtk_common/in_keyboard.c =================================================================== --- trunk/src_plugins/lib_gtk_common/in_keyboard.c (revision 6685) +++ trunk/src_plugins/lib_gtk_common/in_keyboard.c (revision 6686) @@ -73,3 +73,44 @@ return mk; } + +gboolean ghid_port_key_press_cb(GtkWidget *drawing_area, GdkEventKey *kev, gpointer data) +{ + if (ghid_is_modifier_key_sym(kev->keyval)) + return FALSE; + + if (kev->keyval <= 0xffff) { + GdkModifierType state = (GdkModifierType) (kev->state); + int slen, mods = 0; + static pcb_hid_cfg_keyseq_t *seq[32]; + static int seq_len = 0; + unsigned short int kv = kev->keyval; + + ghid_note_event_location(NULL); + + extern GdkModifierType ghid_glob_mask; + ghid_glob_mask = state; + + if (state & GDK_MOD1_MASK) mods |= PCB_M_Alt; + if (state & GDK_CONTROL_MASK) mods |= PCB_M_Ctrl; + if (state & GDK_SHIFT_MASK) { +/* TODO#3: this works only on US keyboard */ + static const char *ignore_shift = "~!@#$%^&*()_+{}|:\"<>?"; + if ((kv < 32) || (kv > 126) || (strchr(ignore_shift, kv) == NULL)) { + mods |= PCB_M_Shift; + if ((kv >= 'A') && (kv <= 'Z')) + kv = tolower(kv); + } + } + + if (kv == GDK_KEY_ISO_Left_Tab) kv = GDK_KEY_Tab; + slen = pcb_hid_cfg_keys_input(&ghid_keymap, mods, kv, seq, &seq_len); + if (slen > 0) { + ghid_port.view.has_entered = 1; + pcb_hid_cfg_keys_action(seq, slen); + return TRUE; + } + } + + return FALSE; +} Index: trunk/src_plugins/lib_gtk_common/in_keyboard.h =================================================================== --- trunk/src_plugins/lib_gtk_common/in_keyboard.h (revision 6685) +++ trunk/src_plugins/lib_gtk_common/in_keyboard.h (revision 6686) @@ -8,3 +8,7 @@ /** Returns key modifier state */ ModifierKeysState ghid_modifier_keys_state(GdkModifierType * state); + +/** Handle user keys in the output drawing area. */ +gboolean ghid_port_key_press_cb(GtkWidget *drawing_area, GdkEventKey *kev, gpointer data); +