Le gestionnaire de fenêtre

le Window Manager

/* wm.c */

/* fenetres avec et sans intervention du gestionnaire de fenetres */

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

GC      gc; 
Display *display; 
int     screen; 
Window  win, win2, root; 
unsigned long white_pixel, black_pixel; 
XSetWindowAttributes attributs;
unsigned long masque_valeur;
 
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); 
  masque_valeur = 0;
  attributs.background_pixel = white_pixel;
  masque_valeur |= CWBackPixel;
  attributs.border_pixel = black_pixel;
  masque_valeur |= CWBorderPixel;
  attributs.override_redirect = True;
  masque_valeur |= CWOverrideRedirect;
  win = XCreateWindow (display, root, 0, 0, 200, 200, 5, CopyFromParent, 
		       InputOutput, CopyFromParent, masque_valeur, &attributs);
  XStoreName(display, win, "wm_A");
  XSelectInput (display, win, ExposureMask); 
  attributs.background_pixel = black_pixel;
  attributs.border_pixel = white_pixel;
  attributs.override_redirect = False;
  win2 = XCreateWindow (display, root, 0, 0, 200, 200, 5, CopyFromParent, 
		       InputOutput, CopyFromParent, masque_valeur, &attributs);
  XStoreName(display, win2, "wm_B");
  XSelectInput (display, win2, ExposureMask); 
  XMapWindow(display, win);
  XMapRaised(display, win2); 
  
  for (;;) { 
    XEvent ev; 
    XNextEvent (display, &ev); 
    switch (ev.type) { 
    case Expose :              
      break; 
    default : 
      break;            
    } 
  } 
}

Exécution :

Essayez de modifier et bouger les 2 fenêtres.

Fonctionnement de ce programme:

override_redirect permets d'annuler/activer la redirection des requêtes vers le W. M. (gestionnaire de fenêtre), donc son intervention mais aussi son aide.

window manager :

C'est une application cliente particulière.
Il aide l'utilisateur du terminal sous X pour déplacer ses fenêtres, modifier leur taille, iconiser, définir l'application qui recevra la frappe au clavier, fermer les fenêtres, ... . Et ceci avec une ergonomie utilisant la souris. Le WM définit et organise le bureau. Sans WM, l'utilisateur ne peut agir sur les fenêtres que si les applications l'ont prévu.
Il modifie les requêtes du client : par exemple XCreateWindow demandée en (0,0) et alors qu'il y a déjà une fenêtre xterm en (0,0) créera la nouvelle fenêtre dans une zone libre du bureau. Les requêtes portant sur la géométrie des feêtres sont redirigées du serveur X vers le WM qui les modifient.

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