ログイン
編集不可のページディスカッション情報添付ファイル
"clear/wm_devel/2013-02-11"の差分

MMA
1と2のリビジョン間の差分
2013-02-11 22:55:34時点のリビジョン1
サイズ: 1906
編集者: clear
コメント:
2013-02-12 14:34:07時点のリビジョン2
サイズ: 2554
編集者: clear
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 2: 行 2:

参照: ICCCM 4.1.5
行 13: 行 15:
WMはConfigureRequestをどのように処理したかに応じて以下の処理を行う:
 * リクエストを完全に無視した場合
  * クライアントに人工の(synthetic)ConfigureNotifyイベントを送る。内容は以下の通り:
   * ウィンドウのジオメトリは現在の(変更されていない)値
    * 座標はルートウィンドウ基準で、クライアントがリクエストしたウィンドウ幅に合わせたもの
   * クライアントがリクエストした枠の幅
 * サイズや枠の幅を変更せず、座標やスタック順序だけを変更した場合
  * クライアントに人工のConfigureNotifyを送る。内容は以下の通り:
   * ウィンドウのジオメトリは新しい値
    * 座標はルートウィンドウ基準で、クライアントがリクエストしたウィンドウ幅に合わせたもの
   * クライアントがリクエストした枠の幅
  * reparentしている場合、クライアントに真のConfigureNotifyは届かない
   * フレームウィンドウ内での座標は変わらないため
ConfigureRequestが処理され、クライアントの座標やサイズが実際に変化するとクライアントにはConfigureNotifyが送信される。ConfigureRequestがWMにリダイレクトされた場合、WMがどうするかでConfigureNotifyが届くかどうかが変わる。
 * 完全に無視した場合: 届かない
 * 座標やスタック順序だけを変更した場合: reperenting WMでは届かない
  * reparentしていると、クライアントウィンドウの座標系はフレームウィンドウに対するものになる
  * ウィンドウの移動はフレームウィンドウの移動によって行われるので、クライアントウィンドウの座標は変化しない
  * スタック順序についても同じ
  * WMは、クライアントウィンドウの移動をクライアントに通知するために人工の(synthetic)ConfigureNotifyを作ってクライアントに送る
 * ウィンドウサイズ、あるいはウィンドウ枠の幅を変更した場合: 届く
  * リサイズの場合はフレームと共にクライアントウィンドウをリサイズする必要がある
  * WMによってクライアントウィンドウに変更されるので、ConfigureNotifyが届く
  * ウィンドウ枠についても同様だが、reparenting WMは通常クライアントウィンドウの枠を取り去ってから自分で枠をつけるのであまり関係ない
WMがConfigureNotifyを作って送るとき、ウィンドウの座標はルートウィンドウの座標系での値でなければならない(フレーム内でのクライアントウィンドウの座標をルートウィンドウ内での座標に変換する必要がある)。

ウィンドウの配置

参照: ICCCM 4.1.5

ConfigureRequest

クライアントはConfigureWindowリクエストによってウィンドウの以下の属性を変更できる。

  • (x,y)座標(ルートウィンドウに対する)
  • サイズ(枠を含まない)
  • 枠の幅
  • スタック順序

WMが存在しなければこのリクエストは直ちにXサーバによって処理されるが、WM存在下ではWMにリダイレクトされてConfigureRequestイベントとして届く(Xサーバはリクエストを処理しない)。

  • このときWMは要求をどのように扱っても良い(WMがクライアントの要求通りにする保証はない)
  • WMはリクエストされた値をウィンドウの初期座標を決定するときと同様に扱う

ConfigureRequestが処理され、クライアントの座標やサイズが実際に変化するとクライアントにはConfigureNotifyが送信される。ConfigureRequestがWMにリダイレクトされた場合、WMがどうするかでConfigureNotifyが届くかどうかが変わる。

  • 完全に無視した場合: 届かない
  • 座標やスタック順序だけを変更した場合: reperenting WMでは届かない
    • reparentしていると、クライアントウィンドウの座標系はフレームウィンドウに対するものになる
    • ウィンドウの移動はフレームウィンドウの移動によって行われるので、クライアントウィンドウの座標は変化しない
    • スタック順序についても同じ
    • WMは、クライアントウィンドウの移動をクライアントに通知するために人工の(synthetic)ConfigureNotifyを作ってクライアントに送る

  • ウィンドウサイズ、あるいはウィンドウ枠の幅を変更した場合: 届く
    • リサイズの場合はフレームと共にクライアントウィンドウをリサイズする必要がある
    • WMによってクライアントウィンドウに変更されるので、ConfigureNotifyが届く

    • ウィンドウ枠についても同様だが、reparenting WMは通常クライアントウィンドウの枠を取り去ってから自分で枠をつけるのであまり関係ない

WMがConfigureNotifyを作って送るとき、ウィンドウの座標はルートウィンドウの座標系での値でなければならない(フレーム内でのクライアントウィンドウの座標をルートウィンドウ内での座標に変換する必要がある)。

clear/wm_devel/2013-02-11 (最終更新日時 2013-02-25 21:09:39 更新者 clear)