Ich habe ein einfaches Programm geschrieben, das Ereignisse beim Drücken und Loslassen von Tasten für ein bestimmtes Fenster meldet. In meinem Fall ist es meistens das Terminal, da ich das Programm über das Terminal aufrufe. Ich bin in der Lage, die Tastendruck- und -freigabeereignisse im Terminalfenster zu erhalten (ich habe XSelectInput() mit KeyPressMask und KeyReleaseMask auf dem Terminal verwendet), aber dasselbe funktioniert nicht mit ButtonPress und ButtonRelease. Nicht nur diese, sondern alle Ereignisse, die mit der Maus zu tun haben, werden nicht gemeldet. Haben Sie eine Idee, warum dies der Fall ist?
#include
#include
#include
#include
#include
#include
int main() {
Display *display = XOpenDisplay(NULL);
KeySym k;
int revert_to;
Window window;
XEvent event;
XGetInputFocus(display, &window, &revert_to);
XSelectInput(display, window, KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask);
while(1)
{
XNextEvent(display,&event);
switch (event.type) {
case KeyPress : printf("Key Pressed\n"); break;
case KeyRelease : printf("Key Released\n"); break;
case ButtonPress : printf("Button Pressed\n"); break;
case ButtonRelease : printf("Button Released\n"); break;
case EnterNotify : printf("Enter\n"); break;
}
}
XCloseDisplay(display);
return 0;
}