/* 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; } } }
Essayez de modifier et bouger les 2 fenêtres.
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 |