2010-08-25 22 views
3

Je souhaite obtenir des codes de clé indépendants du mappage, mais la documentation indique que «keycode» dans la structure XKeyEvent dépend du matériel et du pilote et je ne peux pas m'en fier. Comment puis-je obtenir des codes clés portables comme VK_ * dans Windows?Codes à barres portables dans X11?

Répondre

4

Vous voulez des syms de touches, pas des codes de touches. Voir XKeycodeToKeysym() et /usr/include/X11/keysymdef.h

être strictement correcte (en particulier avec l'internationalisation) vous avez besoin d'un tas de codes le long des lignes de http://git.gnome.org/browse/gtk+/tree/gdk/x11/gdkkeys-x11.c Toutefois, si vous utilisez cru Xlib au lieu d'une boîte à outils vous ne vous souciez probablement pas de ce genre de chose (si vous y êtes pour des années de travail), et XKeycodeToKeysym() est assez bon pour les claviers américains.

+1

Mais que se passe-t-il si l'utilisateur change la disposition du clavier pour quelque chose de non-US? –

+0

Oui, c'est ça. J'ai utilisé XLookupString() par erreur au lieu de XKeycodeToKeysym(). –

+1

Si vous vous souciez des claviers internationaux et des langues, l'utilisation d'une boîte à outils au lieu de Xlib est la seule chose sensée, vraiment. Le fichier gtk auquel je suis lié vous donne la partie clavier, mais en omettant les méthodes de saisie, l'équivalent de GtkAccelGroup (faire fonctionner les accélérateurs avec des claviers internationaux), afficher/rendre unicode arbitraire, éditer du texte bidirectionnel, etc ... Je ne suis pas sûr comment résumer gdkkeys-x11.c brièvement ... Je veux dire, ce n'est pas facile. J'ai implémenté la première version de ce fichier mais je ne m'en souviens pas beaucoup. Juste XKeycodeToKeysym() est probablement assez bon pour beaucoup de buts. –