Example #1
0
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);
}