X11, как определить, я последнее окно / приложение на дисплее - PullRequest
2 голосов
/ 26 апреля 2010

У меня есть дисплей x11 с менеджером окон (к сожалению, не конкретный, это могут быть twm, dtwm, mwm, metacity…), myApp и другие приложения с окнами. Я хочу закрыть дисплей, если другие приложения закрыты, и myApp - единственное приложение с окнами на дисплее. Я знаю окна myApp, но как мне отличить окна оконного менеджера от других приложений.

В настоящее время я опрашиваю xwininfo -tree -root -children и сравниваю это с тем, что ожидаю, но это работает только в «четко определенной» среде.

Кажется, что многие из вышеупомянутых оконных менеджеров не поддерживают EWMH.

1 Ответ

1 голос
/ 30 апреля 2010

Не будет абсолютно без хакерского пути.

ICCCM рекомендует определять окна верхнего уровня (в отличие, в частности, от фреймов WM) путем поиска свойства WM_STATE. Таким образом, вы могли бы отличить окна приложений с этим. Однако, когда WM переопределяет окно во фрейм, будет сложно найти окно приложения внутри фрейма. Вам нужно было бы реализовать небольшую программу, чтобы сделать что-то вроде xwininfo -tree, но проверять только окна с установленным WM_STATE.

Относительно хорошим решением было бы использовать libwnck или один из инструментов на его основе (wmctrl, пирог дьявола). Тем не менее, для этого требуется оконный менеджер EWMH (который включает в себя что-то отдаленно современное или вменяемое, но звучит так, будто вы имеете дело с какими-то по-настоящему старомодными вещами). Преимущество этих инструментов в том, что они используют EWMH для идентификации окон приложения и даже семантического типа этих окон приложения (диалоговое окно и т. Д.).

Кроме того, libwnck устраняет необходимость опроса, он может просто наблюдать за изменениями в списке окон верхнего уровня.

...