# Window manager

Il window manager (o in italiano, gestore delle finestre) è un componente dell'interfaccia grafica del sistema operativo computer che gestisce l'aspetto e la posizione di una finestra in un ambiente desktop.

## Storia

Negli anni 1970, Xerox Alto divenne il primo computer fornito con una GUI WIMP funzionante. Utilizzava un gestore di finestre impilabile che consentiva la sovrapposizione di finestre. Sebbene non sia chiaro se Microsoft Windows contenga progetti copiati dal sistema operativo Mac di Apple, è chiaro che nessuno dei due è stato il primo a produrre una GUI utilizzando finestre impilate. All'inizio degli anni '80, Xerox Star, successore di Alto, utilizzava la "piastrellatura" (tiling) per la maggior parte delle finestre delle applicazioni principali e la sovrapposizione solo per le finestre di dialogo, eliminando la maggior parte della necessità di impilare. Mac OS è stato uno dei primi esempi di successo commerciale di una GUI che utilizzava una sorta di gestione delle finestre di impilamento tramite QuickDraw. Attualmente macOS utilizza un Window manager più avanzato che supporta il compositing da Mac OS X 10.0 ed è stato aggiornato in Mac OS X 10.2 per supportare il compositing con accelerazione hardware tramite Quartz Compositor
GEM 1.1 era un gestore di finestre che supportava la metafora del desktop e utilizzava lo stacking, consentendo la sovrapposizione di tutte le finestre. È stato rilasciato all'inizio degli anni '80. GEM è famoso per essere stato incluso come GUI principale utilizzata su Atari ST, che eseguiva Atari TOS, ed era anche una popolare GUI per MS-DOS prima dell'uso diffuso di Microsoft Windows. A seguito di una causa legale di Apple, GEM è stata costretta a rimuovere le funzionalità di impilamento, rendendolo un gestore di finestre di affiancamento.
Durante la metà degli anni '80, il sistema operativo Amiga conteneva un primo esempio di un gestore di finestre di compositing chiamato Intuition (una delle librerie di basso livello di AmigaOS, che era presente nelle ROM di sistema Amiga), in grado di riconoscere quali finestre o parti di esse erano coperte e quali finestre erano in primo piano e completamente visibili, in modo che potesse disegnare solo le parti dello schermo che richiedevano l'aggiornamento. Inoltre, Intuition supportava la composizione. Le applicazioni potrebbero prima richiedere una regione di memoria al di fuori della regione di visualizzazione corrente da utilizzare come bitmap. Il sistema a finestre Amiga userebbe quindi una serie di bit blit usando l'hardware blitter del sistema per creare un composto di bitmap di queste applicazioni, insieme a pulsanti e cursori, nella memoria del display, senza richiedere a queste applicazioni di ridisegnare nessuna delle loro bitmap.
L'intuizione anticipava anche le scelte dell'utente riconoscendo la posizione del puntatore fluttuante su altri elementi dello schermo (barre del titolo delle finestre, i loro gadget di chiusura e ridimensionamento, intere icone), e quindi era in grado di garantire quasi un'attesa zero dichiarare l'esperienza nell'utilizzo del window manager Workbench. Quest'ultimo è stato l'unico window manager che alla fine ha ispirato un'intera famiglia di discendenti e successori: Ambient in MorphOS, Zune/Wanderer in AROS, Workbench NG (New Generation in AmigaOS 4.0 e 4.1). Workbench 4.1 è stato migliorato dall'interfaccia vettoriale 2D alimentata dalle librerie Cairo e presenta un moderno motore di composizione basato su Porter-Duff 3D.
Nel 1988 Presentation Manager divenne la shell predefinita in OS/2, che, nella sua prima versione, utilizzava solo un'interfaccia a riga di comando (CLI). IBM e Microsoft hanno progettato OS/2 come successore di DOS e Windows per DOS. Dopo il successo di Windows 3.10, però, Microsoft ha abbandonato il progetto a favore di Windows. Successivamente, il progetto Microsoft per una futura versione 3 di OS/2 è diventato Windows NT e IBM ha apportato una riprogettazione completa della shell di OS/2, sostituendo il Presentation Manager di OS/2 1.x per Workplace Shell orientato agli oggetti che ha fatto il suo debutto in OS/2 2.0.

## Tipologie
### X window system

Sui sistemi che utilizzano X Window System, c'è una chiara distinzione tra il gestore di finestre e il sistema a finestre. A rigor di termini, un X window manager non interagisce direttamente con hardware video, mouse o tastiere: questa è responsabilità del server di visualizzazione.
Gli utenti del sistema X Window hanno la possibilità di utilizzare facilmente molti diversi gestori di finestre: Metacity, utilizzato in GNOME 2, e KWin, utilizzato in KDE Plasma Workspaces e molti altri. Poiché molti gestori di finestre sono modulari, le persone possono usarne altri, come Compiz (un gestore di finestre di composizione 3D), che sostituisce il gestore di finestre. Sawfish e awesome d'altra parte sono gestori di finestre estensibili che offrono un controllo preciso delle finestre. È anche possibile combinare e abbinare componenti di diversi gestori di finestre; ad esempio, le decorazioni per finestre di KWinpuò essere utilizzato con i componenti desktop e dock di GNOME.
Gli X window managers hanno anche la capacità di ri-genitore delle applicazioni, il che significa che, mentre inizialmente tutte le applicazioni sono adottate dalla finestra di root (essenzialmente l'intero schermo), un'applicazione avviata all'interno della finestra di root può essere adottata da un'altra finestra. I gestori di finestre sotto il sistema X Window adottano le applicazioni dalla finestra principale e le modificano nelle decorazioni delle finestre (ad esempio, aggiungendo una barra del titolo). La ri-genitorialità può essere utilizzata anche per aggiungere i contenuti di una finestra a un'altra. Gli X window managers per la ri-genitorialità possono quindi disporre uno o più programmi nella stessa finestra e possono facilmente combinare affiancamento e impilamento in vari modi.

### Microsoft Windows

Microsoft Windows ha fornito un window manager di stacking integrato a partire da Windows 2.0; Windows Vista ha introdotto il Compositing Desktop Window Manager (dwm.exe) come alternativa facoltativa con accelerazione hardware. In Windows, poiché GDI fa parte del kernel, il ruolo del gestore di finestre è strettamente associato ai sottosistemi grafici del kernel ed è in gran parte non sostituibile, sebbene le utilità di terze parti possano essere utilizzate per simulare un gestore di finestre di affiancamento su in cima a tali sistemi. A partire da Windows 8, il Desktop Window Manager basato su Direct3D non può più essere disabilitato. Può essere riavviato solo con la combinazione di tasti di scelta rapida Ctrl + Maiusc + Win + B.
Windows Explorer (explorer.exe) viene utilizzato per impostazione predefinita come shell nei moderni sistemi Windows per fornire una barra delle applicazioni e un file manager, insieme a molte funzioni di un window manager; gli aspetti di Windows possono essere modificati tramite le utilità di configurazione fornite, modificando il registro di Windows o con strumenti di terze parti, come WindowBlinds o Resource Hacker. Il window manager di Windows può anche agire come un window manager X tramite Cygwin / X in modalità multiwindow (e, possibilmente, altre implementazioni di X window).
Notare che Microsoft e X Window System utilizzano termini diversi per descrivere concetti simili. Ad esempio, raramente viene menzionato il termine window manager da parte di Microsoft perché è integrato e non sostituibile e distinto dalla shell. La shell di Windows è analoga al concetto di ambiente desktop in altri sistemi di interfaccia utente grafica.

## Classificazione

I gestori di finestre sono spesso divisi in tre o più classi, che descrivono il modo in cui le finestre vengono disegnate e aggiornate.

### Compositing window manager

I compositing window manager consentono di creare e disegnare separatamente tutte le finestre, quindi assemblarle e visualizzarle in vari ambienti 2D e 3D. I compositing window manager più avanzati consentono una grande varietà di aspetto dell'interfaccia e la presenza di effetti visivi 2D e 3D avanzati.

### Stacking window manager

Tutti i gestori di finestre che hanno finestre sovrapposte e non sono compositing window managers, sono stacking window managers, sebbene sia possibile che non tutti utilizzino gli stessi metodi. I gestori di finestre sovrapposte consentono alle finestre di sovrapporsi disegnando prima le finestre di sfondo, che vengono chiamate algoritmo del pittore. Le modifiche a volte richiedono che tutte le finestre siano impilate o ridipinte, il che di solito comporta il ridisegno di ogni finestra. Tuttavia, per portare una finestra di sfondo in primo piano di solito è necessario ridisegnare solo una finestra, poiché le finestre di sfondo possono avere parti di altre finestre dipinte su di esse, cancellando efficacemente le aree coperte.

### Tiling window manager

I gestori di finestre affiancate (tiling) dipingono tutte le finestre sullo schermo posizionandole una accanto all'altra o una sopra e sotto l'altra, in modo che nessuna finestra ne copra mai un'altra. Microsoft Windows 1.0 ha utilizzato l'affiancamento e sono disponibili una varietà di gestori di finestre di affiancamento per X.

### Window manager dinamico

I gestori di finestre dinamici possono passare dinamicamente dal layout della finestra affiancato a quello mobile. Una varietà di window manager dinamici per X sono disponibili.

## Caratteristiche e struttura
### Componenti principali
#### Autohide

    Un autohide consente ai menubars di scomparire quando il puntatore viene allontanato dal bordo dello schermo.

#### Borders

    Un bordo è un componente di decorazione della finestra fornito da alcuni gestori di finestre, che appare intorno alla finestra attiva. Alcuni gestori di finestre possono anche visualizzare un bordo attorno alle finestre di sfondo.

#### Menù contestuale

    Alcuni gestori di finestre forniscono un menu contestuale che appare quando un evento clic alternativo viene applicato a un componente desktop.

#### Sfondo del desktop

    Alcuni gestori di finestre forniscono una funzione di sfondo del desktop che visualizza un'immagine di sfondo nella finestra principale.

#### Focus Stealing

    Il Focus Stealing è una funzionalità fornita da alcuni window manager. Consente a un'applicazione non attiva di ottenere improvvisamente lo stato attivo e rubare l'input dell'utente destinato all'applicazione precedentemente focalizzata.

#### Iconificazione

    Una funzione di iconificazione consente agli utenti di ridurre a icona le applicazioni in esecuzione su un'icona sul desktop o su un'icona del pannello delle attività.

#### Joined Windows

    Alcuni gestori di finestre forniscono una funzione di finestre unite che consente all'utente di unire insieme i telai delle finestre dell'applicazione.

#### Comandi equivalenti della tastiera

    Alcuni gestori di finestre forniscono comandi equivalenti di tastiera che consentono alla tastiera di replicare la funzionalità del mouse.

#### Barra dei menu

    Una barra dei menu fornisce la possibilità di avviare programmi tramite un menu e può contenere funzionalità aggiuntive tra cui un pulsante di avvio, una barra delle applicazioni e una barra delle applicazioni.

#### Pannello dei menu

    Un pannello di menu un componente di alcuni gestori di finestre (Window manager) che fornisce la funzionalità per avviare i programmi utilizzando un menu. Un pannello del menu è simile a una barra dei menu, ma appare come un pannello mobile, anziché come una barra orizzontale o verticale.
    Il pannello del menu può contenere funzionalità aggiuntive tra cui un pulsante di avvio, un pannello delle attività e una barra delle applicazioni.

#### Mouse focus

    Il modello Mouse focus determina il modo in cui il dispositivo di puntamento influenza il focus dell'input all'interno del window manager. Il Mouse focus determina quale componente dell'interfaccia utente grafica è attualmente selezionato per ricevere l'input quando il puntatore viene spostato sullo schermo.

#### Mouse warping

    La Mouse warping è una funzione che centra il puntatore sull'applicazione corrente quando viene attivata.

#### Desktop multipli

    Un gestore di finestre può fornire una funzione per più desktop. Ciò consente il passaggio tra diversi desktop della finestra principale. Ciò previene l'ingombro della finestra principale, poiché le applicazioni possono essere eseguite su desktop diversi.

#### Pager

    Alcuni gestori di finestre forniscono uno strumento cercapersone che consente di passare da un desktop all'altro. Il Pager può apparire come una finestra su schermo o come un gadget nella barra delle applicazioni o nel pannello delle applicazioni.

#### Plugin

    Alcuni gestori di finestre hanno una struttura modulare che consente ai moduli plug-in di fornire le funzionalità richieste.

#### Rollup

    Una funzione di rollup consente alle finestre di apparire come una semplice barra del titolo sul desktop.

#### Menu principale

    Alcuni gestori di finestre forniscono un menu principale, che appare quando si tocca la finestra principale o lo sfondo del desktop.

#### Scorciatoie

    Alcuni gestori di finestre forniscono una funzione di collegamento che consente agli utenti di posizionare le icone nella finestra principale che accedono a programmi o servizi specifici.

#### Finestre a schede

    Alcuni gestori di finestre forniscono una funzione di finestre a schede che raggruppa le applicazioni in frame comuni.

#### Task Switching

    Il Window manager può fornire varie funzionalità di cambio attività che consentono all'utente di modificare l'applicazione attualmente focalizzata, tra cui:
   * Modifica del Mouse focus utilizzando un dispositivo di puntamento
   * Funzioni di commutazione delle attività della tastiera (ad esempio, premendo Alt-Tab)
   * Facendo clic sull'attività in una barra delle applicazioni o nel pannello delle applicazioni

#### Barra delle applicazioni

    Alcuni gestori di finestre forniscono una barra delle applicazioni che mostra le applicazioni in esecuzione. La barra delle applicazioni può mostrare tutte le applicazioni in esecuzione compresi quelli che sono stati ridotti al minimo, e può fornire la possibilità di passare di messa a fuoco tra di loro. La barra delle applicazioni può essere incorporata in una barra dei menu su alcuni gestori di finestre.

#### Pannello delle attività

    Un pannello delle attività è simile a una barra delle applicazioni, ma appare come un pannello mobile, anziché come una barra orizzontale o verticale.

#### Pulsante Start

    Un pulsante di avvio è un widget desktop che fornisce un menu di programmi che possono essere avviati. Il pulsante di avvio è in genere posizionato su una barra dei menu nella parte inferiore dello schermo.

#### Area di notifica

    Un'area di notifica viene utilizzata per visualizzare le icone per le funzionalità del sistema e del programma che non hanno una finestra sul desktop. Contiene principalmente icone per indicare informazioni sullo stato e notifiche come l'arrivo di un nuovo messaggio di posta. Alcuni sistemi possono anche mostrare un orologio nell'area di notifica.

#### Barre del titolo

    Una barra del titolo è un componente di decorazione delle finestre che alcuni gestori di finestre forniscono nella parte superiore di ogni finestra. La barra del titolo viene generalmente utilizzata per visualizzare il nome dell'applicazione o il nome del documento aperto e può fornire pulsanti della barra del titolo per ridurre a icona, ingrandire, chiudere o arrotolare le finestre dell'applicazione.

#### Pulsanti della barra del titolo

    I pulsanti della barra del titolo sono inclusi nella barra del titolo di alcuni gestori di finestre e offrono la possibilità di ridurre a icona, ingrandire, eseguire il rollup o chiudere le finestre dell'applicazione. Alcuni gestori di finestre possono visualizzare i pulsanti della barra del titolo nella barra delle applicazioni o nel pannello delle attività, invece che in una barra del titolo.

#### Desktop virtuale

    Un desktop virtuale (chiamato anche desktop a scorrimento) è una funzionalità fornita da alcuni gestori di finestre che consente al desktop di essere più grande dello schermo effettivo.

### La finestra attiva

Una finestra attiva è la finestra "focused" corrente di Window manager. Diversi gestori di finestre indicano la finestra attualmente attiva in modi diversi e consentono all'utente di passare da una finestra all'altra in modi diversi. Ad esempio, in Microsoft Windows, se sono aperti sia Blocco note che Microsoft Paint, facendo clic nella finestra Blocco note la finestra diventerà attiva. In Windows, la finestra attiva è indicata da una barra del titolo di colore diverso. Tuttavia, fare clic non è l'unico modo per selezionare una finestra attiva: alcuni gestori di finestre (come FVWM) attiva la finestra sotto il puntatore del mouse: è sufficiente spostare il mouse per cambiare finestra; non è necessario un clic.
I gestori di finestre spesso forniscono un modo per selezionare la finestra attiva utilizzando la tastiera in alternativa al mouse. Una tipica combinazione di tasti è Alt + Tab, usata da Windows e KDE (per impostazione predefinita, sebbene sia configurabile dall'utente); un altro è il tasto apple -tilde, utilizzato da Macintosh. La pressione della combinazione di tasti appropriata in genere scorre tutte le finestre visibili in un certo ordine, sebbene siano possibili altre azioni.
Molti gestori di finestre, sebbene non tutti, forniscono un'area dello schermo contenente una sorta di controllo visivo (spesso un pulsante) per ogni finestra sullo schermo. Ogni pulsante contiene in genere il titolo della finestra e può contenere anche un'icona. Quest'area dello schermo generalmente fornisce una sorta di indicazione visiva di quale finestra è attiva, ad esempio, il pulsante della finestra attiva potrebbe apparire "premuto". Di solito è anche possibile cambiare la finestra attiva facendo clic sul pulsante appropriato. In Microsoft Windows, quest'area dello schermo è chiamata barra delle applicazioni; nei sistemi Apple Macintosh quest'area dello schermo è chiamata dock.
La finestra attiva potrebbe non trovarsi sempre davanti a tutte le altre finestre sullo schermo. La finestra attiva è semplicemente la finestra a cui vengono inviati i tasti digitati sulla tastiera; può essere oscurato visivamente da altre finestre. Ciò è particolarmente vero nei gestori di finestre che non richiedono un clic per cambiare le finestre attive: FVWM, ad esempio, rende attiva la finestra sotto il cursore del mouse ma non cambia il suo ordine Z (l'ordine in cui appaiono le finestre, misurato dallo sfondo in primo piano). È invece necessario fare clic sul bordo della finestra per portarla in primo piano. Ci sono anche situazioni nei gestori di finestre click-to-focus come Microsoft Windows in cui la finestra attiva potrebbe essere oscurata; tuttavia, questo è molto meno comune.

## Esempi

* Con composizione
** Aero (gestore delle finestre di Windows da Vista in poi)
** Beryl
** Compiz
** KWin (originariamente chiamato Kwm, è il gestore delle finestre predefinito di KDE)
** Metacity (gestore delle finestre predefinito di GNOME dalla versione 2.2)
** Mutter (gestore delle finestre predefinito di GNOME Shell)
** Quartz Compositor (gestore delle finestre di macOS)
** Xfwm (gestore delle finestre predefinito di Xfce)
** Muffin (gestore delle finestre di Cinnamon a partire dalla versione 1.4)
* Senza composizione
** AfterStep
** Awesome
** Blackbox
** Enlightenment
** Fluxbox
** FVWM (un virtual window manager, derivato da twm)
** IceWM
** Ion un tabbed window manager progettato per essere usato da tastiera
** MWM (Motif Window Manager)
** Openbox, usato tra gli altri da LXDE
** Sawfish (originariamente chiamato Sawmill)
** twm (Tom's Window Manager)
** Window Maker
Altri software meno frequentemente implementati sono:
* wmii
* Dynamic window manager (dwm) - tiling window manager dinamico.
* 5Dwm - gestore delle finestre derivato da mwm
* 9wm - clone del gestore delle finestre di Plan 9
* aewm
* amiwm - clone dell'Amiga workbench.
* MLVWM - clone dell'interfaccia del Mac OS classico.
* CTWM
* evilwm
* FVWM95
* HaZe
* JWM - Joe's Window Manager
* Kahakai
* larswm
* Luminocity
* lwm
* Matchbox - window manager per sistemi embedded
* OLWM (e OLVWM con desktop virtuali, OPEN LOOK window manager)
* Oroborus
* OroboROX
* PekWM
* PWM
* Qvwm - gestore delle finestre simile a Windows 95/98
* Ratpoison
* Scwm - Scheme constrained window manager
* Small window manager
* Solbourne window manager
* Toy'd
* TrsWM
* uwm
* Waimea
* WindowLab
* wm2
* WMI
* xmonad
* XPwm
* i3 - gestore di finestre di tipo tiling, disponibile su sistemi GNU/Linux e BSD