X11, как определить, я последнее окно / приложение на дисплее

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

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

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

1 ответ

Решение

Там не будет совершенно не хакерский путь.

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

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

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

Другие вопросы по тегам