_NET_FRAME_EXTENTS
ウィンドウマネージャが周囲に付けたフレームの厚みをプログラムに伝えるEWMHのプロパティ。自分が画面のどこにいるかを計算するために使う。
親替え(reparenting)型のウィンドウマネージャの下では、アプリのウィンドウはフレームの子であり、XGetGeometry が返す座標はすべてフレームからの相対値になる。プログラムにはタイトルバーも枠も見えず、ウィンドウツリーをさかのぼって足し算でもしない限り、自分の左上が画面のどこにあるか分からない。多くはそこまでせず、位置を保存して次回復元するたびにタイトルバーの高さ分ずつ下へ這っていく、あの古典的なバグが生まれた。ICCCMの答えは WM_NORMAL_HINTS のグラビティ欄だったが、理解する人は少なかった。EWMH 1.3 は単純な道を選んだ。ウィンドウマネージャが全クライアントウィンドウに _NET_FRAME_EXTENTS を設定し、左・右・上・下にフレームが占めるピクセル数の四つの数値を与える。
これでプログラムは全体の大きさを計算でき、自分だけでなくフレームごとの位置を要求できる。KWin は以前から同じ数値を独自名 _KDE_NET_WM_FRAME_STRUT で設定しており、今も続けている。まだマップされていないウィンドウ向けには、ウィンドウマネージャが引き受ける前に見積りを求める _NET_REQUEST_FRAME_EXTENTS がある。クライアントサイド装飾で関係は逆転した。GTK 3が影を自分のウィンドウ内に描くとき、ウィンドウマネージャはそのうちどれだけが空白かを知る必要があり、それが逆向きの同じ四つの数値、_GTK_FRAME_EXTENTS である。xprop は両方を表示する。wmctrl -e が指定どおりの位置に置いてくれない理由は、たいていここに見つかる。