ARDrone を制御するための C プログラムを作成しています。キーを押している間はドローンを動かし、キーが押されなくなったら動きを止めたいと考えています。作成したウィンドウに key_press_event と key_release_event の両方を追加しました。コールバック関数は次のとおりです。
gint key_press_cb(GtkWidget *widget,
GdkEventKey *kevent,
gpointer data)
{
unsigned int key;
int res;
/* While a key is pressed the drone moves,
* when the key is released it is put back into hover mode */
if(kevent->type == GDK_KEY_RELEASE) {
// Hover mode
printf("--- Hover Mode ---\n");
ardrone_at_set_progress_cmd(0, 0, 0, 0, 0);
//res = keyboard_update(BACKSPACE);
} else if(kevent->type == GDK_KEY_PRESS) {
key = kevent->keyval;
g_message("Key pressed: %c [%d]", key, key);
res = keyboard_update(key);
}
return TRUE;
}
キーを短時間押し続けるとキー リリース イベントが発生しますが、2 秒以上押し続けるとキー リリース イベントが表示されません。キーを押しながら key_press_events を常に受信しているためだと考えていました。その繰り返しを無効にする方法はありますか?