2010-04-26 1 views
1

windowmanager가있는 x11 디스플레이가 있습니다 (슬프게도 특정 것이 아니라 twm, dtwm, mwm, metacity ...), myApp 및 기타 응용 프로그램 창문이있는. 다른 응용 프로그램이 닫히고 myApp 응용 프로그램이 닫히고 디스플레이에 창이있는 유일한 응용 프로그램 인 경우 디스플레이를 닫고 싶습니다. myApp의 창을 알고 있지만 창 관리자와 다른 응용 프로그램의 창을 구분하는 방법은 무엇입니까?X11, 마지막 윈도우/디스플레이 응용 프로그램을 감지하는 방법

저는 현재 xwininfo-tree -root-children으로 폴링 중이며 기대 한 것과 이것을 비교합니다. 그러나 이것은 '잘 정의 된'환경에서만 작동합니다.

위의 windowmanager 중 많은 수가 EWMH를 지원하지 않는 것으로 보입니다.

답변

0

전혀 해킹되지 않는 방법이 될 것입니다.

ICCCM은 WM_STATE 속성을 찾아 최상위 창 (특히 WM 프레임과 반대)을 식별 할 것을 권장합니다. 따라서 애플리케이션 윈도우를 구분할 수 있습니다. 그러나 WM이 창을 프레임으로 다시 표시하면 프레임 창 안의 응용 프로그램 창을 찾기가 까다로워집니다. xwininfo -tree와 같은 것을하기 위해 작은 프로그램을 구현해야하지만 WM_STATE가 설정된 창만 확인하면됩니다.

비교적 멋진 해결책은 libwnck 또는 그것을 기반으로하는 도구 (wmctrl, devil 's pie) 중 하나를 사용하는 것입니다. 그러나 이것은 EWMH 창 관리자 (원격으로 현대적이거나 건전한 것을 포함하지만 그것은 정말로 오래된 curmudgeonly 것들을 다루는 것처럼 들린다)이 필요합니다. 이러한 도구의 장점은 응용 프로그램 창과 해당 응용 프로그램 창 (대화 상자 등)의 의미 유형을 식별하는 데 EWMH를 사용한다는 것입니다.

또한 libwnck은 폴링 필요성을 제거하고 최상위 창 목록의 변경 사항을 감시 할 수 있습니다.

+0

답변 해 주셔서 감사합니다. 나는 그렇게 될 것이라고 생각했지만 나를 도울 마법/부두가있을 수 있기를 바랐다. 나는 허용 된/기본 창 ("mwm, metacity ...")의 편집 가능한 목록을 갖는 것으로 끝났다. xwininfo 부분은 별도의 사용자 정의 c 모듈로 대체됩니다 (여전히 폴링). 좋지는 않지만 일하고 적응할 수 있습니다. –