Léxico de TI › Programação › WM_WINDOW_ROLE

WM_WINDOW_ROLE

Programação Svenska → Atualizado: 2026-10-10

A propriedade do ICCCM com um nome curto que diz qual das janelas de um programa é aquela — "browser", "3pane", "gimp-toolbox" — para que gerenciadores de sessão e regras de janela a reconheçam mesmo depois de o título mudar.

Um programa com várias janelas de nível superior tem um problema na hora de reiniciar: o WM_CLASS é igual para todas, o WM_NAME muda a cada documento, e os IDs de janela são novos a cada execução. Em 1994, o ICCCM 2.0 acrescentou o WM_WINDOW_ROLE em seu capítulo sobre gerenciamento de sessão: uma string que deve ser única entre as janelas do programa e estável entre execuções, para que um gerenciador de sessão recoloque a janela principal e o diálogo de preferências onde estavam. Quem escolhe o nome é o programa. O Firefox escreve "browser", o Thunderbird "3pane", o GIMP 2 definia "gimp-toolbox", "gimp-dock" e "gimp-image-window" em suas janelas, e programas GTK que nunca decidiram costumam acabar com um nome gerado, feito do nome do programa mais dígitos aleatórios. Se a propriedade não existe, o ICCCM recorre ao WM_CLASS e então exige que ele seja único por janela, coisa com que quase ninguém se incomoda.

A parte de sessão é usada tanto quanto o resto do XSMP, mas o papel ganhou uma segunda vida como chave em regras de janela. As regras do KWin podem casar pelo papel da janela, o Openbox aceita role= na regra <application>, e o xdotool search --role encontra a janela seja qual for o título. Os papéis do GIMP o popularizaram: uma janela de ferramentas acoplada, sem barra de título, numa determinada área de trabalho, foi durante anos o exemplo clássico de todo arquivo de regras. O GTK expôs a propriedade como gtk_window_set_role e o Qt como QWidget::setWindowRole; o GTK 4 removeu a função, e no Wayland existe apenas o app_id, um por janela de nível superior — mais ou menos o que o WM_CLASS já era.

← Voltar ao léxico