LINUX.ORG.RU

[X11][Qt] перехват сообщений

 ,


0

0

Есть класс QApplication. Если задать в нем свой x11EventFilter то я могу видеть некоторые X11 события/сообщения... Проблема в том что некоторые сообщения не приходят вообще (это я знаю наверняка, так как есть другая программа, в которую они приходят).

http://tronche.com/gui/x/xlib/events/structure-control/map.html Тут написано, что «To receive MapRequest events, set the SubstructureRedirectMask bit in the event-mask attribute of the window». Вопрос: как это делается?

Анализируя программу, в которой это сообщение приходит (она тоже написана на Qt), я обнаружил, что все запросы, в которых фигурирует SubstructureRedirectMask - все проходят с ошибкой и если их удалить - то... сообщение MapRequest все равно приходит, т.е. от этих обращений нет толка. И лишь простой вызов этой функции QApplication::desktop()->winId() в этой программе активирует прием сообщения MapRequest... Чудеса...

Вопрос: как заставить программу на Qt принимать абсолютно все сообщения X11 которые появляются на X сервере?

Например тут www.linux.org.ru/wiki/en/NETWM#Шпион описан способ получать все сообщения от X сервера. Пробовал я так же как тут и описано, но опять же - сообщения приходят не все.

I-Love-Microsoft ★★★★★
() автор топика

>http://tronche.com/gui/x/xlib/events/structure-control/map.html Тут написано, что «To receive MapRequest events, set the SubstructureRedirectMask bit in the event-mask attribute of the window». Вопрос: как это делается?
Не знаком с qt, но, по-моему, там можно получить иксовое окно и потом работать с ним. Для установки SubstructureRedirectMask на окне нужно использовать функцию XChangeWindowAttributes.

Вопрос: как заставить программу на Qt принимать абсолютно все сообщения X11 которые появляются на X сервере?

Так же, как и для получения MapRequestEvent нужно выставить SubstructureRedirectMask у маски событий окна, для получения всех возможных сообщений нужно выставить все возможные биты у маски. Вот их списочек http://tronche.com/gui/x/xlib/events/mask.html .

Laz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.