LINUX.ORG.RU

Xlib: как получить event по изменению atom'а? =)


0

0

собственно сабж =) чтой-то я здесь совсем запутался с событиями и ICCC...CCCM =)можно получить event по изменению некого определенного атома каким-либо мне заранее неизвестным процессом?

цель проста до умопомрачения - хочу получать событие по изменению PRIMARY atom'а (то есть когда кто-либо произведет выделение данных и как следствие помещение их в буфер обмена)...

RSM

P.S.: сидеть на таймауте не предлагать - сам так сижу сейчас - не нравится =)

anonymous

Это не изменение атома нужно... Атомы вообще не изменяются, могут только внедряться новые. Атом - это всего лишь связь между текстовой строкой и числовым идентификатором, и не более того. Атом PRIMARY используется только для идентификации Selection-а (Selection-ов может быть сколько угодно. конкретный надо как-то идентифицировать)

Дело в том, что нет в Xlib никакого помещения данных в буфер. Вместо этого, клиент при помощи функции XConvertSelection() явно требует от клиента, владеющего Selection-ом, выдать значение.
Точнее, это происходит так:
- клиент уведомляет сервер, что теперь он владеет Selection-ом, при помощи XSetSelectionOwner(). При этом клиент, который владел выделением раньше, получает событие SelectionClear.
- клиент, желающий получить значение выделения, вызывает XConvertSelection(). Сервер посылает клиенту, владеющему выделением, событие SelectionRequest. В ответ этот клиент обязан послать клиенту, вызвавшему XConvertSelection(), событие SelectionNotify (при помощи XSendEvent()).

Получить уведомление о том, что кто-то вызвал XSetSelectionOwner() ... не уверен, что возможно. Можете почитать поподробнее XLib Reference Manual, может я что пропустил, но боюсь, что периодическая проверка - единственный способ решения вашей задачи.

P.S. e-mail: yoush@cs.msu.su, ICQ: 115225930

yoush
()

Сенькс =) похоже все как я и думал... а жаль...

RSM

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