Si pulsa sin soltar una tecla en el X11, mientras RepeticiónAutomática está activado, recibirá continuamente KeyPress y KeyRelease eventos. Sé que AutoRepeat se puede desactivar con la función XAutoRepeatOff(), pero esto cambia la configuración de todo el servidor X. ¿Hay alguna manera de deshabilitar AutoRepeat para una sola aplicación o ignorar pulsaciones de teclas repetidas?Ignorar repetición automática en aplicaciones X11
Lo que estoy buscando es un solo evento KeyPress cuando se pulsa una tecla y un solo KeyRelease evento cuando se suelta una tecla, sin interferir con el ajuste RepeticiónAutomática del servidor X.
Aquí está un ejemplo mínimo para que te va (en su mayoría del Beginner Xlib Tutorial):
#include <stdio.h>
#include <stdlib.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xos.h>
#include <X11/Xatom.h>
#include <X11/keysym.h>
Display *dis;
Window win;
XEvent report;
int main()
{
dis = XOpenDisplay (NULL);
// XAutoRepeatOn(dis);
win = XCreateSimpleWindow (dis, RootWindow (dis, 0), 1, 1, 500, 500,
0, BlackPixel (dis, 0), BlackPixel (dis, 0));
XSelectInput (dis, win, KeyPressMask | KeyReleaseMask);
XMapWindow (dis, win);
XFlush (dis);
while (1)
{
XNextEvent (dis, &report);
switch (report.type)
{
case KeyPress:
fprintf (stdout, "key #%ld was pressed.\n",
(long) XLookupKeysym (&report.xkey, 0));
break;
case KeyRelease:
fprintf (stdout, "key #%ld was released.\n",
(long) XLookupKeysym (&report.xkey, 0));
break;
}
}
return (0);
}
¡Gracias, eso es exactamente lo que he estado buscando! – mzuther