2017-01-21 2 views
0

j'ai attrapé une clé avec XGrabKey:tout en maintenant enfoncée la touche et appuyez sur empoigné les autres touches sont également « saisirent »

int mods = 0; 
bool ownerevents = true; 
XGrabKey(display, MY_KEYCODE, mods, rootwin, ownerevents, GrabModeAsync, GrabModeAsync); 

Il saisit avec succès la clé. Dans mon exemple MY_KEYCODE est pour celui de la clé b. Alors maintenant, ma boucle d'événement est en train de décrocher seulement si j'appuie sur la touche b. Cependant, si je maintiens la touche b enfoncée, puis que j'appuie sur d'autres touches, celles-ci sont également signalées à ma boucle d'événement et sont également bloquées, donc "saisies" temporairement. J'ai pensé essayer XAllowEvents dans la partie KeyPressed, mais cela ne fonctionne pas.

Est-ce que quelqu'un a des idées sur la façon d'obtenir d'autres clés, alors que ma clé saisie est maintenue, pour passer sans encombre?

+1

Non, ce n'est pas possible. Une fois la touche saisie enfoncée, le clavier entier est saisi jusqu'à ce que la touche soit relâchée. Qu'essayez-vous de faire? –

+0

Merci @ n.m. pour la lecture et le commentaire! Comment les applications fonctionnent-elles lorsqu'elles envoient une autre touche lorsque j'appuie sur une touche? Comme si j'appuie sur "e" il devrait envoyer "a". Est-ce qu'ils l'envoient sur KeyRelease? – Noitidart

+1

Normalement, cela se fait en remappant une clé. –

Répondre

1

Il n'est pas possible de faire ce que vous voulez. Une fois la touche saisie enfoncée, le clavier entier est saisi jusqu'à ce que la touche soit relâchée.

Si vous souhaitez remplacer par un programme global un keysym lié à une clé, cela est normalement effectué avec le remappage de clé. Voir XChangeKeyboardMapping et XkbChangeMap.

Si vous voulez juste remapper une clé de façon permanente et que cela ne vous intéresse pas, vous voudrez probablement écrire/modifier un fichier de configuration sans vous préoccuper de la programmation. Voir xmodmap et xkbcomp.

+0

Merci beaucoup @ n.m.! – Noitidart