Leksykon IT › Programowanie › Zdarzenia przekroczenia granicy okna (X11)

Zdarzenia przekroczenia granicy okna (X11)

Programowanie Svenska → Zaktualizowano: 2026-10-10

EnterNotify i LeaveNotify — zdarzenia, które serwer X wysyła, gdy wskaźnik przekracza granicę okna; podstawa efektów hover, focus-follows-mouse i sporej dawki nieporozumień.

Gdy wskaźnik opuszcza jedno okno i ląduje w innym, serwer wysyła LeaveNotify do pierwszego i EnterNotify do drugiego — pod warunkiem że klient poprosił o nie przez EnterWindowMask i LeaveWindowMask w swojej masce zdarzeń. Okna tworzą drzewo, więc przejście z wnuka w jednej aplikacji do okna w innej mija kilka okien pośrednich, które również są powiadamiane — zdarzenia oznacza się wtedy jako wirtualne. Pole detail mówi, gdzie w hierarchii leży drugie okno: NotifyAncestor, NotifyInferior, NotifyNonlinear i ich warianty wirtualne. Pole mode mówi, czy wskaźnik faktycznie się poruszył, czy zdarzenie jest skutkiem ubocznym przejęcia lub zwolnienia przechwytu.

Menedżery okien z focus follows mouse nie robią nic ponad nasłuchiwanie EnterNotify na ramkach klientów i wywołanie XSetInputFocus. Podpowiedzi, podświetlane przyciski i menu rozwijane po najechaniu to ten sam mechanizm piętro niżej. Zamieszanie bierze się stąd, że serwer generuje zdarzenia przekroczenia także wtedy, gdy wskaźnik w ogóle się nie ruszył: okno zostało zmapowane lub odmapowane pod nim, przechwyt otworzył menu, menedżer okien przestawił ramki. Program zakładający, że każde LeaveNotify oznacza odejście użytkownika, gubi podpowiedzi w środku kliknięcia, a NotifyInferior — wskaźnik wszedł do własnego dziecka, zamiast wyjść — to błąd, który każdy popełnia dokładnie raz.

← Wróć do leksykonu