Généralités sur X-Window et la XLib

GUI = graphical user interface = moyens pour concevoir un environnement informatique "convivial" pour l'utilisateur composés de :
- un générateur d'image --> assuré par le serveur X
- un système de fenêtrage X-Window
- une interface de programmation --> bas niveau XLib, haut niveau:
Motif, Open Look, ...
- des utilitaires de services (desktop, window manager, ...)

architecture client-serveur de X-Window:
serveur X = serveur de ressources : écran, clavier, souris, ..., le serveur est donc près du terminal !
client = programme utilisant Xlib, librairie de requêtes et interface du protocole X.
communication = protole X : requête émise par le client à destination du serveur, événement émis par le serveur à destination d'un client, communication asynchrone par message sur divers réseaux de communication.
window manager = gestionnaire de fenêtre = client particulier
lancement du serveur : startx qui lance (xinit) un serveur X et un premier client .xinitrc, et d'éventuels autres : xterm, xclock, le window manager fvwm, ...

window manager :
- 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, ...
- modifie les requêtes du client en les redirigeant au wm, exemple XCreateWindow en (0,0) alors qu'il y a déjà une fenêtre xterm.

Fenêtres :
Elles sont hiérarchisées en structure d'arbre : parent et fille. Racine de l'arbre : la fenêtre racine, root window qui occupe tout l'écran, elle constitue le bureau. Une fenêtre fille ne peut être visible qu'à l'intérieure de sa fenêtre parente. Les fenêtres soeurs peuvent se recouvrir comme dans une pile (modifiable). Les fenêtres possédent des attributs graphiques : taille, position, ..., mais aussi de comportements relativement aux événements dont elles sont le siège : souris, clavier, ... Les fenêtres sont des ressources "pas chères", n'hésitez pas à en créer !

Pixel, Pixmap, Bitmap :
Un point de l'écran recoit un pixel d'information caractérisant sa couleur et codé sur un entier de n bits. n=1 pour noir et blanc. Le nombre de couleur possible est 2 puissance n. Le codage des couleurs peut être direct ou indirecte. Un pixmap de profondeur n est une matrice de pixel, et est constitué de n plans de bits. Un bitmap est un pixmap de profondeur n=1.

Requête :
- à sens unique : ordre du client à transmettre au serveur, exemple XDrawString. Ces messages sont stockés dans un tampon du client, puis propagés par lots, enfin exécutés dans l'ordre per le serveur. Mécanisme asynchrone, avec vidage du tampon possible : XNextEvent, XFlush, XSync, XSynchronise.
- à sémaphore : question du client au serveur, exemple XQueryPointer position actuelle de la souris. Les requêtes tamponées sont transmises, puis la requête à sémaphore, le client est alors suspendu jusqu'à la réception du message de "réponse" du serveur. Mécanisme couteux en temps.

Evénement :
- alerte-événement : le serveur informe le client d'un événement du matériel (souris, clavier) ou de la conséquence d'une requête (le déplacement d'une fenêtre en rend visible une autre). Elles peuvent être traitées ou ignorées par le client receveur, selon l'ordre d'émission ou selon d'autres priorités;
- anomalies-erreurs : le serveur informe le client d'une erreur détectée, exemple dessin dans une fenêtre inexistante. Du fait de la communication asynchrone, l'événement-erreur arrive bien après la requête l'ayant provoquée.

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