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

MMA
3と4のリビジョン間の差分
2013-02-12 16:37:33時点のリビジョン3
サイズ: 2600
編集者: clear
コメント:
2013-02-18 22:13:36時点のリビジョン4
サイズ: 2982
編集者: clear
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 28: 行 28:

以下、注意点
 * ConfigureRequestにおいて、変更を求めない値については現在の値がそのまま入っている
  * 座標の変更を要求してきているかどうかで座標系が変わる
   * 座標変更を要求している場合: ルートウィンドウの座標系
   * 要求していない場合: フレームウィンドウの座標系

ウィンドウの配置

参照: ICCCM 4.1.5

ConfigureRequest

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

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

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

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

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

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

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

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

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

以下、注意点

  • ConfigureRequestにおいて、変更を求めない値については現在の値がそのまま入っている

    • 座標の変更を要求してきているかどうかで座標系が変わる
      • 座標変更を要求している場合: ルートウィンドウの座標系
      • 要求していない場合: フレームウィンドウの座標系

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