ウィンドウの配置
ConfigureRequest
クライアントはConfigureWindowリクエストによってウィンドウの以下の属性を変更できる。
- (x,y)座標(ルートウィンドウに対する)
- サイズ(枠を含まない)
- 枠の幅
- スタック順序
WMが存在しなければこのリクエストは直ちにXサーバによって処理されるが、WM存在下ではWMにリダイレクトされてConfigureRequestイベントとして届く(Xサーバはリクエストを処理しない)。
- このときWMは要求をどのように扱っても良い(WMがクライアントの要求通りにする保証はない)
- WMはリクエストされた値をウィンドウの初期座標を決定するときと同様に扱う
WMはConfigureRequestをどのように処理したかに応じて以下の処理を行う:
- リクエストを完全に無視した場合
クライアントに人工の(synthetic)ConfigureNotifyイベントを送る。内容は以下の通り:
- ウィンドウのジオメトリは現在の(変更されていない)値
- 座標はルートウィンドウ基準で、クライアントがリクエストしたウィンドウ幅に合わせたもの
- クライアントがリクエストした枠の幅
- ウィンドウのジオメトリは現在の(変更されていない)値
- サイズや枠の幅を変更せず、座標やスタック順序だけを変更した場合
クライアントに人工のConfigureNotifyを送る。内容は以下の通り:
- ウィンドウのジオメトリは新しい値
- 座標はルートウィンドウ基準で、クライアントがリクエストしたウィンドウ幅に合わせたもの
- クライアントがリクエストした枠の幅
- ウィンドウのジオメトリは新しい値
reparentしている場合、クライアントに真のConfigureNotifyは届かない
- フレームウィンドウ内での座標は変わらないため