Window manager: un'applicazione
particolare che ha il compito di gestire
l'assetto delle finestre top-level nell'ambito del desktop o workspace.
Essendo applicazione, e' client. Ma gira sulla macchina server.
Compiti principali del WM:
WM dialoga con il server attraverso richieste ed eventi (come tutti i client).
Tutte le finestre top-level e solo quelle
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.
Il server ridirige al WM le richieste provenienti da altre applicazioni (altri client) e riguardanti la struttura di una finestra top-level.
WM mappa (rende visibili) finestre top-level arricchendo la finestra con un frame (bordo, barra del titolo, detti anche decorazioni della finestra aggiunte dal WM).
Il frame contiene dispositivi con i quali utente puo' agire sulla
finestra stessa per iconificare, cambiare dimensione, chiudere ecc.
Queste azioni sulla finestra non sono gestite dal programma
applicativo, il programma applicativo gestisce solo le azioni
avvenute all'interno della finestra (comprese le sottofinestre).
WM crea una finestra piu' grande di quella richiesta dal client e ritaglia la finestra del client come sottofinestra.
Al momento di aprire una finestra per la prima volta, il WM e' incaricato dal sistema di posizionarla. Sullo schemo ci sono altre finestre. WM puo' adottare varie politiche per collocare la nuova finestra.
Nelle interfacce di applicazioni si notano elementi ricorrenti che
assolvono funzioni specifiche, caratterizzati da aspetto e comportamento
particolari.
Esempio:
Toolkit sono pacchetti sw implementati sopra la API del sistema
a finestre che forniscono un insieme di widget,
cioe' tipi di elementi di interfaccia prefabbricati,
che il programmatore puo' configurare
(entro i limiti previsti) ed assemblare per costruire un'interfaccia.
Esempi di configurazione:
A seconda del tipo, i widget sono realizzati con una o piu' finestre, widget = window object.
Il toolkit implementa i widget usando la API del sistema a finestre, in modo trasparente all'applicazione.
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.
Supponiamo di avere due macchine in rete: questa.educ.disi.unige.it e unaltra.educ.disi.unige.it. Stando sullo stesso dominio, e' possibile usare solo i nomi questa e unaltra senza il resto dell'indirizzo di rete.
Noi sediamo davanti a questa (il nostro server). Vogliamo far girare un'applicazione su unaltra (il nostro client) e vedere la sua interfaccia su questa.
Utile in casi in cui:
X Protocol: Definisce quali pacchetti di informazione (messaggi) sono scambiati tra client e server tramite rete, cioe' la "sintassi" per trasmettere eventi, richieste, risposte alle richieste.
X Lib:
Libreria (API) di funzioni di basso livello che permettono al client
di comunicare col server per:
ricevere eventi, inoltrare richieste, ricevere risposte.
E' la API del window management system di cui abbiamo parlato in precedenza.
X-lib non impone alcuna scelta riguardo al look-and-feel del sistema intero o dell'interfaccia delle applicazioni in ambiente X-Window. Questo e' compito di strati sw sopra a X-lib:
X-Window non ha un window manager prestabilito ne' dei toolkit prestabiliti. Si puo' scegliere.
In ambiente X, un toolkit e' composto da
Xtoolkit = Xt intrinsics (parte standard X) + widget set (parte non standard)
Esempi di widget sets: