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

MMA
5と15のリビジョン間の差分 (その間の編集: 10回)
2013-03-02 03:22:19時点のリビジョン5
サイズ: 3939
編集者: clear
コメント:
2013-05-10 19:45:44時点のリビジョン15
サイズ: 3821
編集者: clear
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 6: 行 6:
 * focus-follows-mouse
行 8: 行 9:
 * 必要な機能を揃える
行 13: 行 15:
  * 最初はタイトルバーを付けるつもりだったので必要だった
  * 途中で装飾をやめたのであまり意味がなくなった。でも練習のために実装
  * おまけとして、AWTと組み合わせても問題が発生しない
  * 装飾をしないのであまり意味はないが、reparentすることで一部アプリケーションとの相性問題を回避できる
行 17: 行 17:
  * 装飾ないWMによくある、ModKey+ドラッグの方式
  * マウスによるリサイズはウィンドウ内でのマウスポインタの位置に応じた斜め4方向に可能
  * つかめる部分(タイトルバー)が無い、ModKey+ドラッグの方式
  * リサイズは斜め4方向に可能
行 20: 行 20:
  * 画面端へのスナップ(移動終了時にControlを押してると無効化)
 * 最小化/最大化/フルスクリーン
  * 最小化からの復帰はスタック式に行われる。タスクバーと連携させることで任意に復帰可能
 * キーボードによる操作
  * キーバインドはヘッダファイルに埋め込み
 * フォーカス履歴
 * EWMH対応
  * タスクバーとの連携(lxpanelで動作確認)
 * コマンドラインからの設定変更
行 21: 行 30:
== 実装予定の機能(優先度と依存関係による順) ==
 * キーボードによる操作
 * WMからウィンドウを閉じられるようにする
  * キー操作の仕組みさえ実装できればすぐ書ける
 * WMからプログラムを起動できるようにする
  * 同上
  * 端末とランチャ(dmenuとか)さえ起動できればいい
== 予定(優先度と依存関係による順) ==
 * ウィンドウのスタック順序に関する明確なポリシーを定める(現在はかなり適当)
行 29: 行 33:
  * 複数ディスプレイの認識自体は既にしている
 * 最大化/最小化/フルスクリーン
  * マルチディスプレイを認識しないと正しい最大化はできない
  * 最大化とフルスクリーンは違う
  * 最小化したものを復帰する手段が必要
   * Alt-Tab的なのが用意できると良いが、正直面倒<<FootNote(WM配下のウィンドウを作ってウィンドウ一覧を表示するあたりが)>>
   * 「最後に最小化したものを元に戻す」を実装する予定(要するにスタック)
 * タイル配置
  * デフォルトはフローティングにする予定
 * タスクバーとの連携
  * 自前のバーを別のプログラムとして書く予定。特に独自規約で通信したりはしない
  * WMをEWMHに従わせることで、既存のタスクバーアプリケーションとも組み合わせて使えるようにする
 * EWMH対応
  * 必要な部分だけ。タスクバーの実装と並行して行う
  * ロストしたディスプレイにいたクライアントを移動しないと操作不能になる
 * 自前のバー
  * ウィンドウの一覧表示と切り替え程度
  * できれば、stdinあたりから読み込んで表示する通知領域
  * さらにできれば、システムトレイ
   * 規約: http://standards.freedesktop.org/systemtray-spec/systemtray-spec-latest.html
行 46: 行 42:
  * ウィンドウの再描画が減るのでだいぶ軽くなる   * クライアントウィンドウの再描画が減るのでだいぶ軽くなる
  * やってみたけれど何かがおかしくなった<<FootNote(サーバをgrabしたら自分のリクエストまで処理されなくなった)>>ので保留
行 48: 行 45:
  * killされたときにすぐ終了しない問題を直す
行 50: 行 46:
  * Xlibだと比較的簡単だが、イベントキューの中をいじれないXCBだと難しい
行 52: 行 49:
 * 設定ファイルによる設定
行 65: 行 61:
 * ページャとの連携
  * タイル化を実装した場合、ページャはあまり役に立たない
  * _NET_CLIENT_LIST_STACKINGを省略

mn

概要

現在つくってるWM。特徴は以下の通り。

  • XlibでなくXCBを使用
  • スタック型(タイル配置を実装予定)
  • focus-follows-mouse
  • マルチディスプレイ対応(予定)
  • ウィンドウ枠だけの控えめな装飾
  • 必要な機能を揃える

名前の由来は「まどならべ」。ある程度使い物になるところまで行ったらソースを公開する。

実装済みの機能

  • re-parenting
    • 装飾をしないのであまり意味はないが、reparentすることで一部アプリケーションとの相性問題を回避できる
  • マウスによるウィンドウの移動とリサイズ
    • つかめる部分(タイトルバー)が無いので、ModKey+ドラッグの方式

    • リサイズは斜め4方向に可能
    • サイズヒントに対応(ただしアスペクト比を除く)。端末とかはちゃんと文字単位でリサイズする
    • 画面端へのスナップ(移動終了時にControlを押してると無効化)
  • 最小化/最大化/フルスクリーン
    • 最小化からの復帰はスタック式に行われる。タスクバーと連携させることで任意に復帰可能
  • キーボードによる操作
    • キーバインドはヘッダファイルに埋め込み
  • フォーカス履歴
  • EWMH対応
    • タスクバーとの連携(lxpanelで動作確認)
  • コマンドラインからの設定変更

予定(優先度と依存関係による順)

  • ウィンドウのスタック順序に関する明確なポリシーを定める(現在はかなり適当)
  • マルチディスプレイ対応
    • ロストしたディスプレイにいたクライアントを移動しないと操作不能になる
  • 自前のバー

必須ではないが実装したい機能(優先順位なし)

  • ウィンドウ枠だけの移動/リサイズ
    • クライアントウィンドウの再描画が減るのでだいぶ軽くなる
    • やってみたけれど何かがおかしくなった1ので保留

  • イベント処理機構の改善
    • MotionNotifyを圧縮してCPU負荷を低減する

    • Xlibだと比較的簡単だが、イベントキューの中をいじれないXCBだと難しい
  • 仮想デスクトップ
    • 検討中。少なくともタイル配置が実装できた後

実装しない予定の機能

  • タイトルバー
    • ウィンドウタイトルを表示する部分として実装するつもりだったが、gravityの処理をちゃんと書くのに挫折して投げた
    • 文字列描画にcairoやpangoを使うので、依存関係が一つ増える
    • タスクバーを用意することに決めたので、タイトルの表示はそちらでまかなうことに
      • 依存関係を分離できる
    • gravityに関してはまともなものに書き直したので、後で欲しくなったら再検討する
  • デスクトップをクリックしてポップアップするタイプのメニュー
    • ツールキットなしで自前のメニュー機構を実装するのはかなり面倒
    • タイル配置と相性が悪すぎる
    • _NET_WM_WINDOW_TYPE_DESKTOPなウィンドウが存在すると使い物にならない

  • ページャとの連携
    • タイル化を実装した場合、ページャはあまり役に立たない
    • _NET_CLIENT_LIST_STACKINGを省略
  1. サーバをgrabしたら自分のリクエストまで処理されなくなった (1)

clear/wm_devel/mn (最終更新日時 2013-05-10 19:45:44 更新者 clear)