Gestion des événements

 

 

X11 propose de nombreux événements. Vous pourrez peut-être avoir une idée de ce qui se fait via le programme xev (pas forcement installé).

Les événements permettent d'informer les applications clientes:

• Sur les actions de l'utilisateur sur les périphériques d'entrées (clavier, souris, ...)

• Pour avertir des modifications survenues sur les fenêtres (contenu a redessiner, changement de taille, ...), mais aussi sur des structures internes (Modification table de couleurs, table des clés, ...).

• Lors communiquations entre clients. Ces événements proviennent généralement du window manager qui est lui aussi un client.

Interpréter les informations des différents types d'événements

Sélection/masque et propagation des événements

. Sélection des événements avec int XSelectInput(Display *display, Window w, long event_mask)
. Propagation des événements
. Eviter la propagation des évènements
. Remplacer la liste des évènements d'une fenêtre avec XChangeWindowAttributes (Display *display, Window w, CWEventMask, XSetWindowAttributes *xattrib);

Boucle d'attente des événements

. Lecture avec attente d'un événement avec extraction de celui-ci de la file avec int XNextEvent(Display *display, XEvent *Evenement)
. Vérifier qu'il existe un événement à traiter dans la file des événements avec int XPending(display)
. Exemple de boucle
. Lecture avec attente d'un événement sans extraction de celui-ci de la file

Simuler un événement

. Envoyer un événement via XSendEvent()

Exemple de lecture sans attente