2015-07-15 2 views
0

Есть ли событие XAppFocusOut, подобное Windows WM_ACTIVATEAPP или OSX applicationDidResignActive или каким-либо другим способом получить уведомление, когда приложение теряет фокус? Предпочтительным является раствор XCB.Событие X11, когда приложение теряет фокус

Для уточнения: я заинтересован в случае, когда приложение, не окно теряет фокус.

спасибо.

+0

Почему нижний предел? – cap

+0

Возможный дубликат [FocusIn/FocusOut не сгенерирован] (http://stackoverflow.com/questions/18234136/focusin-focusout-not-generated) –

+0

Как это дубликат? Меня интересует событие, когда _app_ не _window_ теряет фокус. – cap

ответ

1

Вы хотите FocusOut X event.

X-сервер может сообщать о событиях FocusIn или FocusOut клиентам, желающим получить информацию о том, когда изменяется фокус ввода. Клавиатура всегда , прикрепленная к некоторому окну (обычно это корневое окно или окно верхнего уровня ), которое называется фокусным окном. Окно фокусировки и положение указателя определяют окно, которое принимает клавиатуру . Клиентам, возможно, потребуется знать, когда фокус ввода изменяется на контрольная подсветка областей на экране.

Чтобы получать события FocusIn или FocusOut, установите бит FocusChangeMask в атрибут маски событий окна.

+0

Это говорит вам, когда окно теряет фокус. Меня интересует событие, когда окно теряет фокус в результате фокусировки, например, значок на рабочем столе или другое окно _из другого приложения_, но _not_ в результате переключения между окнами моего собственного приложения. – cap

+1

@cap - для этого вам нужно надежно отслеживать ВСЕ окна, созданные этим приложением. Некоторые идеи о том, как это сделать, приведены здесь: http://unix.stackexchange.com/questions/5478/what-process-created-this-x11-window –

+0

Я нашел FocusOut ненадежным в Kwin 4.x, поэтому я использовал другое решение: [monitor _NET_ACTIVE_WINDOW, подписавшись на события PropertyNotify в корневом окне] (http://stackoverflow.com/a/41426283/435253). – ssokolow

Смежные вопросы