Widget Shell (Xt)
O widget do Xt que você nunca vê, mas que conversa com o gerenciador de janelas: toda janela de nível superior, caixa de diálogo e menu popup de um programa Xt vive dentro de um shell.
O Xt monta interfaces como árvores de widgets, mas só um tipo de widget pode ser dono de uma janela filha da raiz: o shell. Ele tem exatamente um filho, recebe os desejos de tamanho e geometria desse filho e os traduz em propriedades do ICCCM, como WM_NORMAL_HINTS, WM_NAME e WM_CLASS, para que o gerenciador de janelas saiba com o que está lidando. Tudo o que um programa Xt sabe sobre o gerenciador de janelas, ele sabe por meio do shell.
As classes formam uma cadeia. OverrideShell ativa o override-redirect e atende menus que não querem moldura. WMShell acrescenta a conversa com o gerenciador de janelas, VendorShell é o gancho em que um toolkit como o Motif insere suas próprias dicas, TransientShell dá aos diálogos que acompanham sua janela principal via WM_TRANSIENT_FOR, TopLevelShell é uma janela comum com ícone, e ApplicationShell é a primeira janela, a que tem a linha de comando e o nome de recurso. O X11R6 acrescentou o SessionShell para gerenciamento de sessão. Os programadores raramente os encontram pelo nome: XtAppInitialize cria o primeiro, e XtCreatePopupShell, os demais.