Я прочитал много информации о графической системе X11 и нашел много вопросов по этому вопросу без ответа. Итак, позвольте мне спросить больше времени.
Мне нужна классическая реализация механизма ловушек (например, SetWindowsHookEx) или любой другой подход в UNIX-подобных операционных системах с ТОЛЬКО ОДИН СОСТОЯНИЕ : умение слушать события без блокировки исходного события (как XGrabButton и XUngrabButton).
Постскриптум Бен, это Данила. Мне нужна помощь! ®
Я закончил тем, что взял исходный код из Xnee — это позволяет записывать все входные события, включая клавиатуру и мышь с неблокирующей логикой. Единственное ограничение заключается в том, что я должен спросить, есть ли какие-либо события в цикле с интервалом 100 мс, но это нормально для меня — загрузка процессора вообще отсутствует.
Это невозможно сделать глобально (все события / все окна), если вы не читаете низкоуровневую связь (используя pcap или заменяете реальный xserver на прокси, который предоставляет вам все данные)
Чтобы получить уведомление для определенного окна, вы меняете маску события этого окна. Сервер хранит отдельную копию маски событий для окна для каждого клиента и уведомляет каждого клиента, заинтересованного в событиях, соответствующих маске. Например, если вы добавите PointerMotion
Битовая маска для корневого окна события из вашего соединения вы получите события указателя, когда мышь перемещается над корневым окном (если оно видно)