Les événements

 

/* event.c */

/* recoit plusieurs evenements */

#include <stdio.h>
#include <X11/Xlib.h>

GC      gc; 
Display *display; 
int     screen; 
Window  win, root; 
unsigned long white_pixel, black_pixel; 
int i=0;
 
main() {
  if ((display = XOpenDisplay ("")) == NULL) { 
    fprintf (stderr, "Can't open Display\n"); 
    exit (1); 
  } 
  gc = DefaultGC (display, screen); 
  screen = DefaultScreen (display); 
  root = RootWindow (display, screen); 
  white_pixel = WhitePixel (display, screen); 
  black_pixel = BlackPixel (display, screen); 
  win = XCreateSimpleWindow (display, root,  
			     0, 0, 200, 200, 2, black_pixel, white_pixel); 
  XSelectInput (display, win, ExposureMask | ButtonPressMask | KeyPressMask); 
  XStoreName (display, win, "event"); 
  XMapWindow (display, win); 
 
  for (;;) { 
    XEvent ev; 
    XNextEvent (display, &ev); 
    switch (ev.type) { 
    case Expose : 
      XDrawString (display, win, gc, 10, 30, "coucou !", 8);
      break; 
    case ButtonPress :
      i++ ;
      XDrawString (display, win, gc, 10+10*i, 30+10*i, "ici", 3);
      break;
    case KeyPress :
      XClearWindow (display, win);
      XDrawString (display, win, gc, 30, 30, "fini", 4);
      XFlush (display);
      sleep(5);
      XDestroyWindow(display, win);
      XCloseDisplay(display);
      exit(0);
    default : 
      break;            
    } 
  } 
}

 

Exécution :

Cliquez sur un bouton de souris dans et hors de la fenêtre.
Masquez partiellement la fenêtre, Re-dimentionnez la.
Appuyez sur une touche pour finir.

Fonctionnement de ce programme:

XOpenDisplay établit un canal d'affichage (un circuit de communication) entre votre programme client "event" et une "station X" ou terminal X.

DefaultGC, DefaultScreen, RootWindow, White_pixel, Black_pixel sont des macros utilisant les caractéristiques stockées dans le display.
remarque : Xmachin(...) est une fonction, Machin(...) une macro.
DefaultScreen renvoie le numéro d'écran par défaut. 0 si station mono-écran.
root est la fenêtre racine de l'écran. Fenêtre "obligatoire" pour un écran, elle occupe sa totalité, n'est pas déplacable, ni supprimable. Elle est au sommet de la hiérarchie de toutes les fenêtres de cet écran. C'est le bureau !
gc est le contexte graphique associé à la fenêtre racine de l'écran. Il contient toutes les caractéristiques pour écrire, dessiner, ...
White_pixel, Black_pixel donne le code des couleurs blanc et noir.

KeyPressMask est le masque de sélection de l'événement KeyPress provoqué par l'enfoncement d'une touche sur le clavier à destination de la fenêtre foyer (focus) des événements clavier. Par défaut le gestionnaire de fenêtre désigne comme fenêtre foyer des entrées clavier celle dans laquelle a été produit le dernier enfoncement de bouton souris : elle reçoit généralement une "décoration" de "fenêtre active".

XClearWindow repeint la fenêtre avec la couleur de fond.

XFlush force le vidage du tampon d'émission des requetes (communication asynchrone). Les requêtes sont envoyées au serveur, mais pas pour autant exécutées et terminées !

programme suivant index général fonctions de la XLib événements types dans XLib