WM_STATE
ウィンドウマネージャがクライアントウィンドウに設定し、そのウィンドウがどの状態にあるかを示すプロパティ。実際には、そのウィンドウが本物のアプリケーションであることの受領証になった。
ICCCMのプロパティの大半は、クライアントが書いてウィンドウマネージャが読む。WM_STATE は逆向きだ。ウィンドウマネージャがトップレベルウィンドウを引き受けると(通常は自前のフレームで包んで)、状態と、あればアイコンウィンドウのIDという二つのフィールドを持つプロパティを設定する。状態は WithdrawnState(0)、NormalState(1)、IconicState(3)だ。2が空いているのは間違いではない。ZoomState と InactiveState(4)は初期のドラフトに現れ、Xutil.h に廃止の印付きで残されたまま今もそこにある。状態を変えたいクライアントは、ルートウィンドウに WM_CHANGE_STATE を送って頼み、完全に消えたいクライアントは、ウィンドウをアンマップし、意図的なものだとウィンドウマネージャに分かるよう合成のUnmapNotifyを送る。
副作用が目的を上回った。管理されたクライアントウィンドウだけが WM_STATE を持つので、このプロパティは、実際のアプリケーションウィンドウを、その周りのフレームや木の中のあらゆる補助ウィンドウから区別する最も簡単な方法だ。xprop、xdotool、wmctrl、EWMHの _NET_CLIENT_LIST はすべて、これを探すことでクライアントを見つける。つまり、ウィンドウマネージャが動いている下で WM_STATE のないウィンドウは、メニューか、フレームか、誰にも引き受けられていないアプリケーションである。