Casilda 1.0 é lançado: um widget compositor Wayland para GTK 4 que torna o embed de janelas rápido e fácil

Escrito por
Emanuel Negromonte
Emanuel Negromonte é Jornalista, Mestre em Tecnologia da Informação e atualmente cursa a segunda graduação em Engenharia de Software. Com 14 anos de experiência escrevendo sobre...

Embutir janelas em GTK 4, do jeito certo — rápido, nativo e moderno!

No mundo do desenvolvimento desktop Linux, uma notícia dessas merece destaque: Casilda 1.0 acaba de ser lançado. Trata-se de um widget compositor para GTK 4, baseado em Wayland, que resolve um problema antigo e incômodo — como embutir janelas de outros processos em um aplicativo GTK de forma eficiente, segura e moderna.
Lembra do GtkSocket e GtkPlug usados no velho protocolo XEmbed? Pois é, o Casilda chega como a resposta contemporânea a essa necessidade, mas construído sobre tecnologias de ponta, como wlroots e dmabufs, entregando desempenho nativo e flexibilidade inédita.

Nascido da necessidade: a origem no Cambalache

O Casilda não surgiu do nada. Ele nasceu de uma dor real enfrentada durante o desenvolvimento do Cambalache, um novo construtor de interfaces gráficas para GTK. A ideia central do Cambalache era simples: manter as pré-visualizações de widgets em processos separados, evitando que um travamento durante o teste de uma UI derrubasse toda a aplicação.
O problema? Não havia uma maneira prática de “encaixar” essas janelas extras dentro do fluxo normal de um aplicativo GTK. Inicialmente, a solução improvisada foi usar o backend Broadway e exibir o preview em um WebView — mas, como era de se esperar, esse “remendo” logo mostrou suas limitações. Foi aí que nasceu a aposta em algo mais ambicioso: criar um compositor Wayland embutido diretamente em um widget GTK.

A base sólida: wlroots como fundação

Construir um compositor Wayland do zero seria impraticável. É aqui que entra o wlroots, a mesma biblioteca modular que serve de base para projetos de peso como Sway e Hyprland. Com o wlroots, o Casilda consegue lidar com a criação de dispositivos virtuais (teclado, mouse, saídas gráficas), interpretar os protocolos essenciais do Wayland e fornecer uma base estável para interagir com as janelas de clientes.
Cada vez que o widget Casilda é redimensionado, por exemplo, ele notifica os clientes sobre a mudança de resolução — exatamente como faria um compositor tradicional de desktop, mas em escala reduzida e controlada.

De lento a nativo: a revolução da renderização com dmabufs

Na sua forma inicial, o Casilda dependia de wlroots para renderizar a cena completa, copiando os buffers de pixel para superfícies Cairo que, por sua vez, eram desenhadas dentro do GTK. Isso funcionava, mas com sérios custos de desempenho:

  • As aplicações clientes ficavam restritas a renderização via CPU.
  • Era necessário um ciclo extra de cópia para exibir o resultado no GTK.

A virada veio com o suporte a dmabufs — buffers de memória compartilhada entre GPU e compositor. Isso permitiu que as janelas clientes usassem OpenGL ou Vulkan diretamente, entregando aceleração por hardware. Ainda mais importante: o Casilda passou a criar um GdkTexture diretamente de cada dmabuf, integrando essas janelas no grafo de cena do GTK sem cópias extras.
O resultado? Uma performance que não só elimina os gargalos, mas abre espaço para novos efeitos. Imagine um preview de janela com tintura dinâmica ou manipulações em tempo real aplicadas por shaders. Com renderização nativa, tudo isso se torna possível.

Como usar o Casilda em seu projeto

Apesar de toda a complexidade técnica nos bastidores, a API do Casilda é surpreendentemente simples. Para embutir a janela de outro processo, basta criar um CasildaCompositor e adicioná-lo à hierarquia de widgets GTK, como se fosse qualquer outro componente. A comunicação com o processo cliente pode ser feita via UNIX socket ou, mais convenientemente, com a função spawn_async(), que já lança o programa conectado ao compositor interno.

O projeto fornece exemplos claros em C, Python e JavaScript, graças ao uso de GObject introspection — o que significa que praticamente qualquer linguagem com bindings GTK pode se beneficiar. Esse detalhe torna o Casilda particularmente atrativo não só para desenvolvedores de C, mas também para quem prefere trabalhar em linguagens de mais alto nível.

Muito além do XEmbed

Mais do que uma simples substituição, o Casilda representa um avanço qualitativo. Ele traz para o ecossistema GTK uma solução que não apenas “funciona”, mas que está alinhada com os paradigmas modernos do Linux desktop: Wayland como base, aceleração por GPU como padrão e integração suave com GTK 4.
Para IDEs, construtores de UI, dashboards e qualquer ferramenta que precise embutir janelas externas, o GTK Casilda é uma novidade que promete simplificar a vida dos desenvolvedores e elevar o nível da experiência final do usuário.

Compartilhe este artigo