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

MMA
2と3のリビジョン間の差分
2013-02-18 17:11:48時点のリビジョン2
サイズ: 998
編集者: clear
コメント:
2013-02-18 18:48:39時点のリビジョン3
サイズ: 2787
編集者: clear
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 16: 行 16:

タイトルバー再考
 * いるのか
 * ウィンドウ名を表示するだけならバー/パネルの類でも可能かつ省スペース
  * バーをWMに組み込んでしまうと外部のものを使えなくなる
   * 組み込む方が実装は楽でオーバーヘッドも少ない
   * 「一つのことを行え」というUnix哲学的にはよくない
  * WMの付属品として、WMからは分離して別に作る
   * 使うかどうかはユーザに任せる
   * 無くてもWMは動作可能であることが望ましい
   * 少なくとも、他のものに変えても動作するようでないと分離する意味がない
    * 必然的に、連携はEWMHのプロパティを介して行うことになる
 * タイトルバーはウィンドウに追従するので、画面上部/下部に固定されるバーより分かりやすい
 * 「閉じる」ボタンのようなものを付けるならタイトルバーが適している

WMを外部のバー/パネルと連携させるために最低限対応すべきと思われるEWMHのプロパティ
||プロパティ||内容||備考||
||_NET_CLIENT_LIST||存在するクライアントのリスト||||
||_NET_CLIENT_LIST_STACKING||同上、ただしbottom-to-topのスタック順||維持管理が面倒||
||_NET_NUMBER_OF_DESKTOPS||仮想デスクトップ数||これが設定されていないと動かないバー/パネルがある||
||_NET_CURRENT_DESKTOP||現在のデスクトップ||||
||_NET_ACTIVE_WINDOW||現在フォーカスを得ているウィンドウ||||
||_NET_WM_STRUT||パネルが必要とする領域||最大化を正しく行うために必要||
||_NET_WM_STRUT_PARTIAL||パネルが必要とする領域(上より細かい指定)||同上||

座標系について

  • 各ウィンドウはそれぞれの座標系を持っている
    • 原点は左上角、ウィンドウ枠の内側
  • ウィンドウの座標はそのウィンドウの左上角の点の座標で表す
    • こちらは枠の外側の角
  • 子ウィンドウの座標は親ウィンドウの座標系における座標
    • トップレベルウィンドウの座標は、ルートウィンドウの座標系においてのもの
    • reparentすると座標系が変わる
      • ConfigureRequestの希望座標はルートウィンドウの座標系でやってくる

      • ConfigureNotifyを送るときはルートウィンドウの座標系を用いる

  • ウィンドウの幅と高さに枠の幅は含まない
    • リサイズ時は注意する
  • XinearmaやRandR使用時はルートウィンドウが複数の物理モニタにまたがる可能性がある
    • 画面上の原点とルートウィンドウの原点は必ずしも一致しない

タイトルバー再考

  • いるのか
  • ウィンドウ名を表示するだけならバー/パネルの類でも可能かつ省スペース
    • バーをWMに組み込んでしまうと外部のものを使えなくなる
      • 組み込む方が実装は楽でオーバーヘッドも少ない
      • 「一つのことを行え」というUnix哲学的にはよくない
    • WMの付属品として、WMからは分離して別に作る
      • 使うかどうかはユーザに任せる
      • 無くてもWMは動作可能であることが望ましい
      • 少なくとも、他のものに変えても動作するようでないと分離する意味がない
        • 必然的に、連携はEWMHのプロパティを介して行うことになる
  • タイトルバーはウィンドウに追従するので、画面上部/下部に固定されるバーより分かりやすい
  • 「閉じる」ボタンのようなものを付けるならタイトルバーが適している

WMを外部のバー/パネルと連携させるために最低限対応すべきと思われるEWMHのプロパティ

プロパティ

内容

備考

_NET_CLIENT_LIST

存在するクライアントのリスト

_NET_CLIENT_LIST_STACKING

同上、ただしbottom-to-topのスタック順

維持管理が面倒

_NET_NUMBER_OF_DESKTOPS

仮想デスクトップ数

これが設定されていないと動かないバー/パネルがある

_NET_CURRENT_DESKTOP

現在のデスクトップ

_NET_ACTIVE_WINDOW

現在フォーカスを得ているウィンドウ

_NET_WM_STRUT

パネルが必要とする領域

最大化を正しく行うために必要

_NET_WM_STRUT_PARTIAL

パネルが必要とする領域(上より細かい指定)

同上

clear/wm_devel/2013-02-18 (最終更新日時 2013-03-08 02:21:39 更新者 clear)