Eventos de KeyPress para ventanas X

Estoy tratando de escribir una pequeña aplicación para capturar las pulsaciones de teclas de una ventana debajo de X y luego mostrarlas en la pantalla usando OSD o algo así. La idea es usarlo para screencasts y cosas así.

Probé una cirugía en xev y consiguió que funcionara bien, pero luego noté algo gracioso. Si utilizo xev en la ventana que crea, los eventos KEyPress y KeyRelease se registran y puedo verlos. Sin embargo, si utilizo el -id cambie para que xev monitoree otra ventana e intente registrar las pulsaciones de teclas allí, los eventos KeyPress y KeyRelease no siempre se muestran. Parezco conseguir PropertyNotify eventos cuando suceden algunas cosas pero no KeyPress y KeyRelease que es lo que me interesa.

Algunas ventanas se comportan como se esperaba (por ejemplo, gnome-terminal). Algunos otros no lo hacen (por ejemplo, emacs-gtk).

¿Cómo obtengo las pulsaciones de teclas para estas ventanas?

preguntado el 08 de noviembre de 11 a las 10:11

1 Respuestas

Los eventos clave van a la ventana que tiene el foco, que no siempre es la ventana que parece tener el foco. Cuando trato de usar xev en mi ventana de Firefox, los eventos clave van a uno de sus elementos secundarios no visibles (relativo superior izquierdo en (-1, -1), tamaño (1,1).

Puedes usar XGetInputFocus() para saber qué ventana tiene el foco.

respondido 09 nov., 11:01

Interesante. Cuando le doy el foco a mi ventana de Emacs usando Alt-Tab, parece recibir los eventos y puedo rastrearlos. Cuando lo hago pasando el mouse sobre él, no lo hace. Esto es raro. Cómo puedo dar centrarse en una ventana? - Noufal Ibrahim

Supongo que eso seria XSetInputFocus. - Noufal Ibrahim

Programáticamente, conXSetInputFocus. - norte. 1.8e9-donde-es-mi-parte m.

Esto resuelve mi problema (aunque no estoy seguro de todos los detalles técnicos), así que lo estoy marcando como "Aceptado". ¡Gracias nm! :) - Noufal Ibrahim

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.