IT-словарь › Программирование › FocusIn и FocusOut

FocusIn и FocusOut

Программирование Svenska → Обновлено: 2026-10-20

Пара событий, которые X-сервер посылает при переходе фокуса клавиатуры из одного окна в другое, — технически точная и именно поэтому почти не поддающаяся правильной интерпретации.

Фокус устанавливается через XSetInputFocus, обычно оконным менеджером, и каждое окно, выбравшее FocusChangeMask и затронутое переходом, получает FocusOut или FocusIn. Всё просто, пока не прочитаешь поля. mode отделяет обычные смены от вызванных началом или концом захвата клавиатуры (NotifyGrab, NotifyUngrab, NotifyWhileGrabbed). У detail восемь значений — NotifyAncestor, NotifyVirtual, NotifyInferior, NotifyNonlinear, NotifyNonlinearVirtual, NotifyPointer, NotifyPointerRoot и NotifyDetailNone — они описывают, где в дереве окон фокус был и куда попал.

Спецификация тратит страницы на то, какие окна получают какую комбинацию. Большинство программ смотрит на тип события, игнорирует случаи NotifyPointer и надеется на лучшее. Отсюда классический баг X: курсор мигает сразу в двух окнах или ни в одном.

← Назад к словарю