3 votes

Événements souris Xlib et ButtonPressMask

J'ai écrit un programme simple qui rapporte les événements de pression et de relâchement des touches pour une fenêtre particulière. Dans mon cas, il s'agit principalement du terminal puisque j'invoque le programme depuis le terminal. Je suis capable d'obtenir les événements d'appui et de relâchement des touches qui ont lieu dans la fenêtre du terminal (j'ai utilisé XSelectInput() avec KeyPressMask et KeyReleaseMask sur le terminal) mais cela ne fonctionne pas avec ButtonPress et ButtonRelease. Pas seulement ceux-ci, mais tous les événements liés à la souris ne sont pas signalés. Avez-vous une idée de la raison pour laquelle cela se produit ?

#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;
}

1voto

Le problème que vous rencontrez est que Xlib envoie les événements ButtonPress/Release à un seul client. Je pense que la fenêtre avec laquelle vous travaillez a déjà un client qui écoute les événements de la souris. Par conséquent, votre appel SelectInput n'a pas réellement défini les masques ButtonPress/Release et a généré une erreur que vous n'avez pas vérifiée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X