IL SISTEMA X-WINDOW
E' un sistema a finestre (window management system)
indipendente da hw e sistema operativo, con architettura client-server.
Permette di realizzare applicazioni
portabili su macchine diverse sotto sistemi operativi diversi
(tutti della famiglia UNIX).
Progettato per sistemi distribuiti, permette a piu' applicazioni di
cooperare attraverso una rete (es. l'interfaccia grafica gira su una
macchina diversa da quella dove gira il programma).
Anche con architetture e/o sistema operativi diversi.
Tutto avviene in maniera completamente trasparente all'applicazione.
Modello a strati
X non impone alcuno stile di interfaccia o di interazione con l'utente.
Strati sw sopra a X si preoccupano di definire questo (vedere
window manager e toolkits - tra poco).
X Protocol
Definisce quali pacchetti di informazione (messaggi) sono scambiati
tra client e server tramite rete:
-
richieste (client->server): allocare una risorsa, leggere valori
correnti di una risorsa, modificare valori di una risorsa.
Interazione asincrona: server mette le richieste in coda e le
soddisfa quando ha tempo.
-
risposte (server->client): info di ritorno per certi tipi di richieste
(es. allocare una risorsa, ritorna identificatore per accedere alla
risorsa)
-
eventi (server->client): Xlib (sul client) mette eventi in una coda da
cui il programma puo' leggerli uno a uno per processarli (interazione
asincrona)
-
errori (server->client): generati in caso di richieste non valide.
X Server
Alloca e gestisce risorse (finestre, font, bitmap, ...) per conto del
client: solo l'identificatore della risorsa e' conosciuto da client e
passato via rete (assieme ai messaggi che si riferiscono a quella
risorsa).
Passa input dai device (tastiera, mouse) ai client.
Passa output (testo e grafica 2D) dai client al display.
X Lib
Strato piu' basso di X.
Libreria (API) di funzioni che permettono al client di comunicare
col server per:
- ottenere risorse (finestre, pixmap, fonts ...)
- manipolare risorse (leggere, assegnare e modificare proprieta')
- ricevere input (eventi)
- inviare output (testi e grafica 2D)
E' la API del window management system di cui abbiamo parlato in precedenza.
X Client
Un'applicazione che usa i servizi di un X-server usando Xlib
direttamente o indirettamente tramite altre librerie sopra Xlib
(i toolkit di cui abbiamo parlato in precedenza).
Window Manager
Un particolare X-client con compito speciale di gestire finestre sullo
schermo: posizionare, ridimensionare, iconificare, gestire stack order,
stabilire quale finestra ha il focus per mouse e tastiera...
X non fissa un particolare window manager, ne esistono vari, che
utilizzano politiche diverse.
Window manager aggiunge decorazioni a finestre (bordo, barra del titolo,
controlli per iconify, resize ecc.).
Queste caratteristiche della finestra non sono gestite dal programma
applicativo, il programma applicativo gestisce solo l'interno della
finestra (comprese le sottofinestre).
Solo le top-level window di ogni applicazione sono gestite dal window
manager.
L'applicazione non ha il controllo della posizione e dimensione di queste,
ne' del fatto che siano mappate o no.
Puo' dare hints al window manager, ma non e' detto chi siano rispettati;
e comunque l'utente puo' intervenire a cambiare la situazione.
Invece, l'applicazione ha il pieno controllo delle sottofinestre,
e ha la responsabilita' di ridisegnarne il contenuto (refresh) quando
- la finestra cambia dimensioni
- la finestra torna visibile dopo essere stata (parzialmente)
oscurata da altre, oppure iconificata