J'écris un programme C pour contrôler un ARDrone, et je voudrais que le drone bouge tant qu'une touche est enfoncée, et quand la touche n'est plus appuyée, je veux qu'elle s'arrête en mouvement. J'attaché à la fois un key_press_event et key_release_event à la fenêtre, j'ai créé et est la fonction de rappel ici:Événement de validation de clé non reconnu GTK
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;
}
Je vais obtenir un événement de libération clé si je maintenez la touche pendant une courte période de temps, mais lors de la tenue Je ne verrai pas l'événement de libération de clé pendant 2+ secondes. Je pensais que cela pourrait être parce que je reçois constamment key_press_events tout en maintenant une touche; est-il possible de désactiver cette répétition?
Le code que vous avez posté fonctionne très bien pour moi. Peut-être y a-t-il un autre widget dans la fenêtre qui a le focus et qui avale les événements de lancement de clé. –
Je vais poster tout mon code, j'ai essayé de mettre le focus sur la fenêtre mais il semble que ce soit le bouton 'w' par défaut? – MikeG