LINUX.ORG.RU

Перехват событий клавиатуры подчинённого окна в PyQt5 под X11.

 ,


0

1

Добрый день.

Ситуация следующая. Есть процесс А, который подлинковал окно созданное процессом Б через механизм XEmbed, которым рулит qt-шный createWindowContainer (PyQt5).

Всё работает прекрасно, но есть досадная мелочь. События клавиатуры падают в подчинённое окно процесса Б минуя процесс А, что не отвечает требуемой модели работы программы. (По видимому оно становится активным при наведении мыши на него.) В качестве костыльного решения транслирую сообщения из подчиненного процесса в главный через пайп, но хочется от этого механизма избавится, поскольку он налагает некоторые дополнительные ограничения на поведение и делает невозможными некоторые хотелки.

Вопросы:

  • Возможно ли получить поведение, такое, чтобы сообщения падали в главный процесс / или в оба процесса сразу?

  • Если нет, то можно ли сделать так, чтобы внутреннее окно получало управление только при клике на него, а не при наведении курсора?

  • Если что-то из этого возможно, то можно ли это сделать силами Qt?

Заранее спасибо.



Последнее исправление: Mirmik (всего исправлений: 5)

Ответ на: комментарий от deep-purple

Увы, но первый процесс исполняет, в том числе, функции песочницы по отношению ко второму. Было бы обидно разрушить такую удачную модель из-за подобной мелочи.

Mirmik
() автор топика
Последнее исправление: Mirmik (всего исправлений: 1)

Возможно ли получить поведение, такое, чтобы сообщения падали в главный процесс […]?

«По умолчанию» оно так и есть, и встраивающее приложение должно самостоятельно форвардить события во внутреннее. https://specifications.freedesktop.org/xembed-spec/xembed-spec-latest.html#idm45766722140528

Попробуй фокус средствами Qt отобрать.

NeXTSTEP ★★
()
Ответ на: комментарий от Mirmik

Кстати, на wayland поведение такое же, так что я, наверное, зря грешу на x11.

Mirmik
() автор топика
Ответ на: комментарий от deep-purple

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

anonymous
()
Ответ на: комментарий от anonymous

задорнов-ну-тупые.жпг

Запилить трубу между процессом-гостем и вторым окном, которое должно быть родным для основного процесса.

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