Crossing events (X11)
EnterNotify en LeaveNotify, de events die de X-server verstuurt wanneer de aanwijzer een vensterrand overschrijdt: de basis van hovereffecten, focus-follows-mouse en een flinke dosis verwarring.
Telkens wanneer de aanwijzer het ene venster verlaat en in een ander landt, stuurt de server LeaveNotify naar het eerste en EnterNotify naar het tweede, mits de client erom heeft gevraagd met EnterWindowMask en LeaveWindowMask in het eventmasker. Vensters vormen een boom, dus een beweging van een kleinkind in de ene applicatie naar een venster in een andere komt langs diverse tussenliggende vensters, en ook die krijgen bericht, met events die als virtual zijn gemarkeerd. Het veld detail zegt waar in de hiërarchie het andere venster zit: NotifyAncestor, NotifyInferior, NotifyNonlinear en hun virtuele varianten. Het veld mode geeft aan of de aanwijzer echt bewoog of dat het event een neveneffect is van iemand die een grab neemt of loslaat.
Vensterbeheerders met focus follows mouse doen niet meer dan luisteren naar EnterNotify op de clientframes en XSetInputFocus aanroepen. Tooltips, knoppen die oplichten en menu’s die bij hover openklappen zijn hetzelfde, een niveau lager. De verwarring komt doordat de server crossing events genereert terwijl de aanwijzer helemaal niet bewogen heeft: een venster dat eronder wordt gemapt of geünmapt, een grab die een menu opent, een vensterbeheerder die frames herschikt. Een programma dat aanneemt dat elke LeaveNotify betekent dat de gebruiker weg is, verliest zijn tooltips midden in een klik, en NotifyInferior, wat betekent dat de aanwijzer een eigen kind binnenging in plaats van weg te gaan, is de fout die iedereen één keer maakt.