• # XLib

    Posté par . En réponse au message Programmation Xlib. Évalué à 3.

    Tu tapes "Xlib" dans Google et tu tombes sur ça :

    http://www.google.fr/search?hl=fr&q=XLib&btnG=Recherche+Goo(...)

    Et si tu restreins aux pages francophones, tu trouves beaucoup de trucs aussi sympas. Pendant un temps, j'ai beaucoup trainé sur http://www.u-picardie.fr/~ferment/xwindow/(...) .

    D'autre part, toutes les fonctions de la XLib ou presque sont documentées dans les man pages. Moi je fais un

    nm -D /usr/X11R6/lib/libX11.so | grep " T X" | less

    histoire de n'en louper aucune.

    Quant aux atoms, il s'agit du dictionnaire de la XLib. Un atom est une chaîne de caractères associée à un numéro unique. Cela sert à nommer des ressources. C'est un concept que l'on utilise souvent en bases de données. Il y a une liste générale par serveur X. Donc du coté du compilateur du client, un Atom c'est simplement un entier non signé.

    Donc du coup, chaque fois que tu veux te référer à une propriété particulière, tu résouds d'abord son nom complet en son numéro, puis tu utilises celui-ci pour toutes tes requêtes. Cela évite d'avoir soit un nom de fonction différent pour chaque entité, soit une tripotée de #DEFINE écrits en dur dans la X-lib.

    Exemple : Tu veux changer le titre d'une fenêtre. Facile :

    XStoreName (dpy,win,"Mon nouveau titre");

    Où dpy est la connexion vers le serveur X et win le handler de la fenêtre dont tu veux changer le titre. Il existe un certain nombre de fonctions "raccourcis" de ce type pour les opérations les plus triviales. Cependant, le titre d'une fenêtre n'est qu'une des nombreuses propriétés de celles-ci. D'ailleurs, la man page de XStoreName est intitulée « set or read a window’s WM_NAME property ». Cela veut dire qu'il existe une fonction pour gérer toutes les propriétés de manière universelle.

    Tu utilises donc XInternAtom (dpy,win,"WM_NAME") pour récupérer une fois pour toutes l'atome qui correspond, et tu changes la valeur de cette propriété (en l'occurence le titre) avec XChangeProperty ().

    Tu peux en outre utiliser la commande « xlsatoms » pour lister tous les atomes déjà déclarés. Attention, cette base ne sert toutefois qu'à associer le nom complet d'une ressource à son identifiant, mais en AUCUN CAS à stocker des données.

    Moi je fais partie des rares personnes à bien aimer la XLib, qui n'est pas aussi pénible qu'on veut bien le croire, une fois que l'on a bien saisi l'esprit. Il y a juste beaucoup de déclarations à faire en tête du programme, mais le reste se fait relativement aisément ensuite. Je trouve qu'elle est excellente pour apprendre le fonctionnement d'une interface graphique (bien plus que la C.API de Windows par exemple), et notament parce qu'elle introduit un modèle et un environnement objet qui ne s'appuie pas du tout sur le langage.