FocusIn i FocusOut
Para zdarzeń wysyłanych przez serwer X, gdy fokus klawiatury przechodzi z jednego okna na drugie — technicznie precyzyjna, a właśnie dlatego niemal niemożliwa do poprawnej interpretacji.
Fokus ustawia się przez XSetInputFocus, zwykle robi to menedżer okien, a każde okno, które wybrało FocusChangeMask i którego dotyczy zmiana, dostaje FocusOut lub FocusIn. Proste — dopóki nie zajrzy się do pól. Pole mode odróżnia zwykłe zmiany od tych wywołanych początkiem lub końcem przechwycenia klawiatury (NotifyGrab, NotifyUngrab, NotifyWhileGrabbed). Pole detail ma osiem wartości — NotifyAncestor, NotifyVirtual, NotifyInferior, NotifyNonlinear, NotifyNonlinearVirtual, NotifyPointer, NotifyPointerRoot i NotifyDetailNone — opisujących, w którym miejscu drzewa okien fokus był i dokąd trafił.
Specyfikacja poświęca całe strony temu, które okna dostają jaką kombinację. Większość programów czyta typ zdarzenia, pomija przypadki NotifyPointer i ma nadzieję na najlepsze. Efekt to klasyczny błąd X: kursor tekstowy mruga w dwóch oknach naraz albo w żadnym.