Riguardo alla DrawingArea devo fare un appunto:
il metodo Grag(), secondo me, funziona in malo modo, ovvero non ritorna l'immagine della DrawingArea, bensì tutto quello che è presente nella stessa ma anche sopra ad essa.
Questo l'ho sperimentato in pgDesigner, dove la DrawingArea è di dimensioni enormi, ed è contenuta in una ScrollArea. Con Grab(), l'immagine risultante contiene anche la ScrollBar e pure tutto quello che è sopra la drwaing, ovvero menu, form, ecc.
Questo mi ha costretto a creare un logica double-buffering, ovvero la gestione in memoria dell'immagine originale, che poi viene spalmata sulla DrawingArea. Ovviamente questo limita la velocità e incrementa l'uso esagerato dello spazio di memoria.
Questo stesso comportamento si ha con tutti gli oggetti, che hanno un metodo Grab(). Io penso che sia da correggere, perchè a questo punto sarebbe solo un Print Screen classico.
Il discorso è legato alle qt, dato che pgDesigner utilizza quelle librerie, quindi non sò se la stessa cosa accade con le gtk.