Overdrive/2
GTK+
Per mancanza di tempo, negli ultimi mesi ho dovuto lasciare a metà alcuni miei lavori sulle GTK+. Fortunatamente ogni tanto si è aperto qualche spiraglio di tempo libero, e quando ho potuto ritornare alla libreria che (ricordiamolo) ha consentito all’avere di che mangiare non mi sono certo fatto scrupoli.
Le GTK+ sono piagate, da tempo ormai, da una cronica mancanza di sviluppatori nel core team; il flusso di patch in Bugzilla è più o meno costante (anche se non altissimo), ma le persone in grado di fare una revisione delle patch e in generale dei bug segnalati sono poche, e nessuno lavora a tempo pieno sulle GTK+. A questo si aggiunge un’inerzia proveniente dalle compagnie che lavorano con le GTK+ nei confronti di una (ormai inevitabile) rottura della compatibilità binaria e, possibilmente, delle API. Il quadro è complesso, e meriterebbe un post di analisi dei fattori pro e contro una tale rottura di compatibilità all’indietro; sfortunatamente è sabato mattina e non ho molta voglia di farlo - considerate la questione solo rimandata.
Cosa si muove, quindi, nelle GTK+? Cosa ci sarà nella prossima minor release, la 2.12.0? E cosa ci aspetta nel futuro?
Cominciamo con le cose già in trunk:
- Supporto Quartz e DirectFB
- Il lavoro sui backend per GDK continua; il backend per Quartz è mantenuto dagli sviluppatori della Imendio ed è quasi stabile; mancano ancora feature, e molto dipende dalla stabilità del backend Quartz di Cairo, ma comincia ad essere usabile. Il backend DirectFB è invece portato avanti dal team per l’installer grafico della Debian, e ha ricevuto molte attenzioni in occasione del rilascio di Etch. Alcune delle funzionalità sono state aggiunte alla branch stabile, ma
trunkè il posto dove la magia avviene. - Rimosso il supporto a Windows 9x/ME
- Il supporto per i sistemi operativi giocattolo della casa di Redmond era già cessato con la release 2.10; adesso è stato completamente rimosso dalla code base. Chi vuole, può fare un
difftra 2.10 etrunk, procurarsi un incudine e un martello e prepararsi per un’intensa sessione di martellate sui gioielli di famiglia. - Nuova API per le tooltip
- Kristian Reitveld ha creato una nuova API per gestire le tooltip sui vari widget. D’ora in poi, niente più
GtkTooltipsda tenere in giro per tutta la durata dell’applicazione, ma una semplice proprietà che contiene il testo della tooltip (con supporto per il markup). Se si vuole modificare la finestra stessa usata per la tooltip, basta fare l’override di una funzione virtuale della classGtkWidgete si può usare la finestra che si preferisce. Questo, tra l’altro, permette finalmente di poter usare tooltip conGtkTreeVieweGtkComboBox. - File recenti
- Una delle cose che ho scritto io. Finalmente è possibile infilare la lista dei file recenti in un menu costruito usando
GtkUIManager. Per la disperazione (di uno) degli autori di gedit, niente menu “in linea” (come Windows, per intenderci) ma solo come sotto-menu (come OS X). Scrievere una version in linea non è complicato (se volete, trovate una implementazione qui). Ho anche aggiunto la possibilità di inserire elementi del menu prima e dopo la lista dei file recenti nelGtkRecentChooserMenu, così da renderlo più simile a unGtkMenu(quale è). - FileChooser migliorato
- Una delle cose che mi fanno aumentare la misantropia e, in generale, il desiderio di vedere la razza umana estinguersi sono le flame sul selettore di file delle GTK+. Seriamente: ogniqualvolta arriva qualche sedicente esperto di usabilità che urla ai quattro venti come il
GtkFileChooserDialogsia “inusabile” io spero solo che si tratti di qualcuno che vive vicino ad una costa marittima, e aspetto che il riscaldamento globale faccia il resto. Due settimane fa ho fatto il commit della patch (non scritta da me) che aggiungeva il supporto per la ricerca di file usando (indirettamente) Beagle, Tracker o una semplice ricerca per nome. La patch aveva ancora dei problemi, con funzionalità non implementate o comportamenti non consistenti, quindi ho passato questa settimana a scrivere patch per chiudere il bug #435343 e intanto che c’ero anche il bug #435342 (se volete vedere come appare il selettore file adesso, ci sono degli screenshot qui e qui) per aggiungere la lista dei file recenti direttamente nel selettore di file e chiudere così integrazione iniziata con la scorsa versione delle GTK+ - quasi due anni dopo il GUADEC che ha iniziato tutto quanto.
Ovviamente, le novità non sono solo queste. C’è stato un gran lavoro nel portare alcune feature sviluppate per piattaforme embedded, come la navigazione via tasti oppure il metodo di inserimento per tastiere solo numeriche. In più, ci sono nuove feature in fase di valutazione e di revisione che non sono ancora “atterrate” in trunk, come il supporto per il tap-and-hold per i menu contestuali (usato dai touchscreen o più in generale da chi ha puntatori con un tasto solo, come Mac o tablet). Infine, c’è la grossa feature rappresentata dal GtkBuilder, ovvero la possibilità di creare interfacce utente usando XML - come libglade ma integrato ed esteso.
Cosa ci attende nel post-2.12 non si sa. Le GTK+ avranno finalmente un canvas? E come impatterà questo oggetto con la struttura dei widget? In più, avremo finalmente una class GtkApplication per scrivere applicazioni in maniera più semplice, lasciando che siano le GTK+ a gestire le sessioni e lo stato (liberandoci di un bel pezzo di libgnome e libgnomeui)? Avremo un layer per VFS finalmente usabile senza una lobotomia parziale? E una piattaforma per la configurazione che non sia ferma al 2001?
Infine, quando avremo le GTK+ 3.0, con una ripulitura generale del codice?
Non so dare risposte; so solo che chi vivrà, vedrà.
continua…
DierRe said,
May 14, 2007 @ 20:22
Avrei una domanda, da utente gnome, sia sul file chooser dialog ma in generale anche sulla visione a dettagli di nautilus: a nessuno dei developer è saltato in mente che è letteralmente un dito al culo non poter selezionare più file raggruppandoli con il mouse?
O magari non ho trovato io il modo di attivare questa funzione. E’ l’unica cosa che mi sta veramente sul culo di gnome.
zefram said,
May 14, 2007 @ 20:35
intendi il rubberbanding? è una feature del TreeView, non ricordo se è stata aggiunta nelle gtk+ 2.10 o in trunk; va attivata (non è impostata di default) dall’applicazione.
Xander said,
May 14, 2007 @ 21:38
Complimenti per il lavoro svolto.. ed in bocca al lupo per quello a venire!
=)
DierRe said,
May 14, 2007 @ 23:19
@Zefram, uhm…non so come si chiama sinceramente. Hai presente quando nella vista ad icone tieni premuto il mouse e si crea il rettangolo con cui selezioni le icone a gruppi?
Nella vista a dettagli questa cosa non accade.
zefram said,
May 14, 2007 @ 23:32
@dierre
lo so; si chiama “rubberbanding” (selezione a elastico?). è una feature del GtkTreeView da poco (release 2.10 delle gtk+), quindi non penso nautilus l’abbia attivata.
DierRe said,
May 15, 2007 @ 09:56
@zefram: ah ok, anche se ho provato a cercare qualcosa su google ma non ne è venuto fuori nulla ;_;