IL SISTEMA X-WINDOW

Indipendente da hw e sistema operativo, 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:

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:

X Client

Un'applicazione che usa i servizi di un X-server usando Xlib direttamente o indirettamente tramite altre librerie sopra Xlib.

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 libreria di base e i toolkit

Xlib: interfaccia a basso livello tra client e server

Xtoolkit (sono vari): basati su Xlib, forniscono componenti di alto livello per la costruzione di interfacce grafiche

Un toolkit e' composto da

Ci torniamo meglio tra poco.

X Client che usa solo Xlib

Il programma deve: Molto di basso livello, poco agevole per sviluppare interfacce grafiche.

Vedremo un esempio di applicazione molto semplice (e tuttavia il codice e' complicato).

X Client che usa un Toolkit

Un toolkit e' uno strato sw sopra Xlib. Fornisce elementi predefiniti di interfacce, che il programmatore puo' configurare (entro i limiti previsti) ed assemblare per costruire un'interfaccia.

Gli elementi di interfaccia sono chiamati widget (window object). Esempio: bottone, menu', maschera per acquisizione dati ... I widget sono raggruppati in tipi (classi).

Ogni tipo di widget ha:

Il programma deve: Realizzare interfacce e' molto piu' semplice e veloce. Widget sono organizzati in classi secondo paradigma object-oriented, che privilegia riusabilita' ed estensibilita'.
Se un programma ha bisogno di widget con caratteristiche particolari non possedute da nessun widget predefinito, puo' definire nuovi tipi di widget.

Tipi di toolkit

E' scelta di X non fissare un insieme particolare di widget (come non fissa un window manager).

X fornisce una libreria (API) di funzioni di base per definire e manipolare widget: la libreria Xt intrinsics.

Varie case forniscono widget set particolari da associare a Xt intrinsics, ottenendo cosi' un toolkit.

Xtoolkit = Xt intrinsics (parte standard X) + widget set (parte non standard)

Dentro l' X-client:

Esempi di widget sets:

Vedremo la stessa applicazione vista con Xlib tradotta usando Athena widget set, e un altro esempio di applicazione piu' complessa.

File di esempio

Per Xlib: Finestra creata da basicx:

Per Xt:

Finestra creata da basicxt:

Finestre da nextxt.c: 1) appena lanciato, 2) dopo aver ingrandito la finestra principale e aver fatto apparire la seconda finestra
1) 2)

Struttura di un programma che usa Xlib

(versione semplificata monofinestra)

Esempi di eventi:

Struttura di un programma che usa X toolkit

Gerarchia di widget in nextxt.c:

TopLevel e PShell sono gestite da window manager. PShell e Dialog sono sovrapposte e coincidenti. Box e' un contenitore e gestisce la posizione dei due bottoni dentro la finestra TopLevel.


Altre potenzialita' di X che non vediamo


Altri strumenti per lo sviluppo di interfacce

Altri pacchetti per lo sviluppo di interfacce in ambiente X si appoggiano direttamente a Xlib senza usare Xt. Tra questi XForms, il pacchetto usato nell'A.A. 1999/2000.