События KeyPress для X windows - PullRequest
1 голос
/ 08 ноября 2011

Я пытаюсь написать небольшое приложение для захвата нажатий клавиш для окна под X, а затем отображать их на экране с помощью экранного меню или чего-то еще.Идея в том, чтобы использовать его для скринкастов и тому подобного.

Я попытался сделать операцию на xev и заставил его работать нормально, но потом заметил что-то смешное.Если я использую xev в окне, которое само создает, события KEyPress и KeyRelease регистрируются, и я вижу их.Однако, если я использую переключатель -id для xev, чтобы отслеживать другое окно и пытаться регистрировать нажатия клавиш там, они не всегда отображают события KeyPress и KeyRelease.Я, кажется, получаю PropertyNotify события, когда происходят некоторые вещи, но не KeyPress и KeyRelease, которые меня интересуют.

Некоторые окна ведут себя как ожидалось (например, gnome-терминал).Некоторые другие не делают (например, emacs-gtk).

Как получить нажатия клавиш для этих окон?

1 Ответ

2 голосов
/ 09 ноября 2011

Ключевые события идут в окно, которое имеет фокус, которое не всегда является окном, в котором есть фокус. Когда я пытаюсь использовать xev в моем окне Firefox, ключевые события переходят к одному из его недоступных для просмотра дочерних элементов (относительно верхнего левого угла в (-1, -1), размер (1,1).

Вы можете использовать XGetInputFocus(), чтобы узнать, какое окно имеет фокус.

...