Захват событий в X11 даже после потери фокуса - PullRequest
3 голосов
/ 05 октября 2011

Я пытаюсь разработать приложение, которое реагирует на несколько цифровых перьев (IRIS Pens), чтобы, если любой из перьев писал на бумаге;Я передаю выход на один экран.Таким образом, я делаю доску с несколькими входами для себя.

В Ubuntu эти ручки распознаются как мышь и, таким образом, могут обрабатываться аналогично обработке событий мыши.

Итак, что я планируюдля этого нужно обработать эти события в C / C ++ с помощью XLib и передать эти события в приложение Java Swing с помощью обратного вызова JNI.Я могу сделать это, но когда окно X11 теряет фокус, никакие события не передаются в кадр Swing.Я также пытался использовать корневое окно в X11, но, похоже, оно не работает.

Любая помощь будет очень признательна.Заранее благодарю.

Ответы [ 3 ]

2 голосов
/ 11 октября 2011

Как насчет того, чтобы развернуть окно C / X11 перед Java и сделать его прозрачным?Вы должны видеть окно Java, все еще фокусируясь на окне C / X11.

Поскольку вы используете Ubuntu, вы можете добиться этого с помощью плагина «Непрозрачность, яркость и насыщенность» для Compiz.Он находится в пакете compiz-plugins-main, и вы можете активировать его с помощью Compiz Settings Manager (из пакета compizconfig-settings-manager).Когда вы активируете плагин, alt + wheel привязывается по умолчанию для изменения прозрачности сфокусированного окна.

1 голос
/ 11 октября 2011

Создайте модальное диалоговое окно и установите его на XmDIALOG_SYSTEM_MODAL (фактическое имя свойства зависит от вашего инструментария: Motif, Gtk, Qt, ...). Подобные диалоги блокируют весь экран и никогда не могут потерять фокус.

Недостатком является, конечно, то, что вы больше ничего не можете сделать, пока этот диалог находится на экране.

Эта запись в X11 FAQ может помочь.

1 голос
/ 06 октября 2011

Попробуйте прочитать мышь напрямую. Я не помню точное местоположение, но вы должны найти его в чем-то вроде '/ dev / input / mouseX', где X - номер вашего устройства, в диапазоне от 0 до n-1 устройств.

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

Необработанный пакет может быть декодирован, как описано здесь: http://www.computer -engineering.org / ps2mouse /

...