Léxico TI › Programación › Eventos de cruce (X11)

Eventos de cruce (X11)

Programación Svenska → Actualizado: 2026-10-10

EnterNotify y LeaveNotify, los eventos que el servidor X envía cuando el puntero atraviesa el borde de una ventana: la base de los efectos hover, del foco que sigue al ratón y de bastante confusión.

Cada vez que el puntero sale de una ventana y entra en otra, el servidor envía LeaveNotify a la primera y EnterNotify a la segunda, siempre que el cliente los haya pedido con EnterWindowMask y LeaveWindowMask en su máscara de eventos. Las ventanas forman un árbol, así que pasar de un nieto de un programa a una ventana de otro atraviesa varias intermedias, y a ellas también se les avisa, con eventos marcados como virtuales. El campo detail dice dónde está la otra ventana en la jerarquía: NotifyAncestor, NotifyInferior, NotifyNonlinear y sus variantes virtuales. El campo mode indica si el puntero se movió de verdad o si el evento es consecuencia de que alguien tomó o soltó un grab.

Los gestores de ventanas con foco que sigue al ratón no hacen más que escuchar EnterNotify en los marcos de los clientes y llamar a XSetInputFocus. Los tooltips, los botones que se iluminan y los menús que se despliegan al pasar por encima son lo mismo un nivel más abajo. La confusión viene de que el servidor genera eventos de cruce aunque el puntero esté quieto: una ventana que se mapea o desmapea debajo, un grab que abre un menú, un gestor que recoloca los marcos. Un programa que supone que cada LeaveNotify significa que el usuario se fue pierde sus tooltips en mitad de un clic, y NotifyInferior, el puntero entró en una ventana hija propia en vez de salir, es el error que todo el mundo comete una vez.

← Volver al léxico