Léxico de TI › Programação › Eventos de cruzamento (X11)

Eventos de cruzamento (X11)

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

EnterNotify e LeaveNotify, os eventos que o servidor X envia quando o ponteiro cruza a borda de uma janela: a base dos efeitos de hover, do foco que segue o mouse e de bastante confusão.

Sempre que o ponteiro sai de uma janela e cai em outra, o servidor envia LeaveNotify à primeira e EnterNotify à segunda, desde que o cliente os tenha pedido com EnterWindowMask e LeaveWindowMask na sua máscara de eventos. As janelas formam uma árvore, então ir de uma janela neta em um aplicativo para uma janela em outro atravessa várias janelas intermediárias, que também são avisadas, com eventos marcados como virtuais. O campo detail diz onde na hierarquia está a outra janela: NotifyAncestor, NotifyInferior, NotifyNonlinear e suas variantes virtuais. O campo mode diz se o ponteiro realmente se moveu ou se o evento é efeito colateral de alguém ter começado ou terminado uma captura (grab).

Gerenciadores de janelas com foco que segue o mouse não fazem mais do que escutar EnterNotify nas molduras dos clientes e chamar XSetInputFocus. Tooltips, botões que acendem e menus que se abrem no hover são a mesma coisa um nível abaixo. A confusão vem de o servidor gerar eventos de cruzamento sem que o ponteiro tenha se movido: uma janela mapeada ou desmapeada por baixo dele, um grab que abre um menu, um gerenciador de janelas reorganizando molduras. Um programa que supõe que todo LeaveNotify significa que o usuário foi embora perde seus tooltips no meio de um clique, e NotifyInferior, que indica que o ponteiro entrou em um dos seus próprios filhos em vez de sair, é o erro que todo mundo comete uma vez.

← Voltar ao léxico