Hacer una ventana con el fondo transparente utilizando Gtk es un clásico; de hecho hay ejemplos de como hacerlo en python, en C y en Vala. Pero falta como hacerlo con Javascript, y dado que es el lenguaje de moda para Gnome (y también por una serie de circunstancias extra) me he decidido a hacer el ejemplo. Este es el código:
#!/usr/bin/env gjs imports.gi.versions.Gtk = '3.0'; const Gtk = imports.gi.Gtk; const Gdk = imports.gi.Gdk; Gtk.init(null); let window = new Gtk.Window(); window.set_app_paintable(true); let screen = window.get_screen(); let visual = screen.get_rgba_visual(); if (visual && screen.is_composited()) { window.set_visual(visual); window.connect('draw', (widget, cr) => { Gdk.cairo_set_source_rgba(cr, new Gdk.RGBA({red: 0.0, green: 0.0, blue: 0.0, alpha: 0.0})); cr.paint(); return false; }); window.connect('delete-event', () => { Gtk.main_quit(); }); window.show_all(); Gtk.main(); } else { print("El entorno de ventanas no admite transparencia"); }
Aunque el código no tiene nada de especial comparado con las versiones en otros lenguajes, sí es cierto que tuve problemas con Gdk.cairo_set_source_rgba, pues, como se ve, no sigue la estructura «normal» de llamadas como si fuera un objeto, sino que sigue el formato de C. Lo lógico sería hacer cr.cairo_set_source_rgba(…), pero no funciona. Y lo mismo con algunas otras.