static gint keyboard_event_handler(GtkWidget *mk, GdkEventKey *event, gpointer ignored) { int note; char *key; guint keyval; GdkKeymapKey kk; PianoKeyboard *pk = PIANO_KEYBOARD(mk); (void) ignored; /* We're not using event->keyval, because we need keyval with level set to 0. E.g. if user holds Shift and presses '7', we want to get a '7', not '&'. */ kk.keycode = event->hardware_keycode; kk.level = 0; kk.group = 0; keyval = gdk_keymap_lookup_key(NULL, &kk); key = gdk_keyval_name(gdk_keyval_to_lower(keyval)); if (key == NULL) { g_message("gtk_keyval_name() returned NULL; please report this."); return FALSE; } note = key_binding(pk, key); if (note < 0) { /* Key was not bound. Maybe it's one of the keys handled in jack-keyboard.c. */ return FALSE; } if (note == 128) { if (event->type == GDK_KEY_RELEASE) { rest (pk); } return TRUE; } note += pk->octave * 12; assert(note >= 0); assert(note < NNOTES); if (event->type == GDK_KEY_PRESS) { press_key(pk, note); } else if (event->type == GDK_KEY_RELEASE) { release_key(pk, note); } return TRUE; }
int init_key_table () { FILE *fp, *fopen (); char file_name[PATHNAMELEN]; int j, k; for (k = 0; k < sizeof (kansuu_hyo) / sizeof (struct kansuu); k++) { key_binded[k] = 0; } /* uumrcファイルから。 */ if (uumkey_name_in_uumrc[0] != '\0') { strcpy (file_name, uumkey_name_in_uumrc); } else if (strcpy (file_name, LIBDIR), strcat (file_name, "/"), strcat (file_name, lang_dir), strcat (file_name, CPFILE), (fp = fopen (file_name, "r")) != NULL) { /* default */ fclose (fp); } else { /* fprintf(stderr, "Can't open default key bind file.%s\n" , CPFILE); */ /* fprintf(stderr,"デフォルトのキーバインドが異常です。 %s\n",CPFILE); */ fprintf (stderr, MSG_GET (29), CPFILE); return (-1); } for (j = 0; j < 3; j++) { /* for(k = 0; k < 32;k++){ main_table[j][k] = null_fun; } */ for (k = 0; k < TBL_SIZE; k++) { main_table[j][k] = NULL; } main_table[j][NEWLINE] = (int (*)()) 0; main_table[j][CR] = (int (*)()) 0; } for (j = 3; j < TBL_CNT; j++) { for (k = 0; k < TBL_SIZE; k++) { main_table[j][k] = NULL; } } if (key_binding (file_name) == -1) return (-1); return (0); }