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

MMA
1と5のリビジョン間の差分 (その間の編集: 4回)
2013-03-01 19:42:05時点のリビジョン1
サイズ: 1092
編集者: clear
コメント:
2013-03-02 03:22:19時点のリビジョン5
サイズ: 3939
編集者: clear
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 5: 行 5:
 * スタック型(タイルを実装予定)
 * 控えめな装飾
 * スタック型(タイル配置を実装予定)
 * マルチディスプレイ対応(予定)
 * ウィンドウ枠だけの
控えめな装飾
行 12: 行 13:
 * ウィンドウの移動とリサイズ(リサイズは斜め4方向)   * 最初はタイトルバーを付けるつもりだったので必要だった
  * 途中で装飾をやめたのであまり意味がなくなった。でも練習のために実装
  * おまけとして、AWTと組み合わせても問題が発生しない
 * マウスによるウィンドウの移動とリサイズ
  * 装飾のないWMによくある、ModKey+ドラッグの方式
  * マウスによるリサイズはウィンドウ内でのマウスポインタの位置に応じた斜め4方向に可能
  * サイズヒントに対応(ただしアスペクト比を除く)。端末とかはちゃんと文字単位でリサイズする
行 17: 行 24:
  * キー操作の仕組みさえ実装できればすぐ書ける
行 18: 行 26:
  * 同上
行 19: 行 28:
 * 最大化/最小化
 * タイル化
 * マルチディスプレイ対応
  * 複数ディスプレイの認識自体は既にしている
 * 最大化/最小化/フルスクリーン
  * マルチディスプレイを認識しないと正しい最大化はできない
  * 最大化とフルスクリーンは違う
  * 最小化したものを復帰する手段が必要
   * Alt-Tab的なのが用意できると良いが、正直面倒<<FootNote(WM配下のウィンドウを作ってウィンドウ一覧を表示するあたりが)>>
   * 「最後に最小化したものを元に戻す」を実装する予定(要するにスタック)
 * タイル配置
  * デフォルトはフローティングにする予定
行 22: 行 39:
  * 自前のバーを別のプログラムとして書く予定
  * EWMHに従ことで、ものとも組み合わせて使えるようにする
  * 自前のバーを別のプログラムとして書く予定。特に独自規約で通信したりはしない
  * WMをEWMHに従わせることで、既存タスクバーアプリケーションとも組み合わせて使えるようにする
行 25: 行 42:
  * 必要な部分だけ
 * 仮想デスクトップ(付けるかは検討中)
  * 必要な部分だけ。タスクバーの実装と並行して行う

== 必須ではないが実装したい機能(優先順位なし) ==
 * ウィンドウ枠だけの移動/リサイズ
  * ウィンドウの再描画が減るのでだいぶ軽くなる
 * イベント処理機構の改善
  * killされたときにすぐ終了しない問題を直す
  * MotionNotifyを圧縮してCPU負荷を低減する
 * 仮想デスクトップ
  * 検討中。少なくともタイル配置が実装できた後
行 28: 行 53:

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

mn

概要

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

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

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

実装済みの機能

  • re-parenting
    • 最初はタイトルバーを付けるつもりだったので必要だった
    • 途中で装飾をやめたのであまり意味がなくなった。でも練習のために実装
    • おまけとして、AWTと組み合わせても問題が発生しない
  • マウスによるウィンドウの移動とリサイズ
    • 装飾のないWMによくある、ModKey+ドラッグの方式

    • マウスによるリサイズはウィンドウ内でのマウスポインタの位置に応じた斜め4方向に可能
    • サイズヒントに対応(ただしアスペクト比を除く)。端末とかはちゃんと文字単位でリサイズする

実装予定の機能(優先度と依存関係による順)

  • キーボードによる操作
  • WMからウィンドウを閉じられるようにする
    • キー操作の仕組みさえ実装できればすぐ書ける
  • WMからプログラムを起動できるようにする
    • 同上
    • 端末とランチャ(dmenuとか)さえ起動できればいい
  • マルチディスプレイ対応
    • 複数ディスプレイの認識自体は既にしている
  • 最大化/最小化/フルスクリーン
    • マルチディスプレイを認識しないと正しい最大化はできない
    • 最大化とフルスクリーンは違う
    • 最小化したものを復帰する手段が必要
      • Alt-Tab的なのが用意できると良いが、正直面倒1

      • 「最後に最小化したものを元に戻す」を実装する予定(要するにスタック)
  • タイル配置
    • デフォルトはフローティングにする予定
  • タスクバーとの連携
    • 自前のバーを別のプログラムとして書く予定。特に独自規約で通信したりはしない
    • WMをEWMHに従わせることで、既存のタスクバーアプリケーションとも組み合わせて使えるようにする
  • EWMH対応
    • 必要な部分だけ。タスクバーの実装と並行して行う

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

  • ウィンドウ枠だけの移動/リサイズ
    • ウィンドウの再描画が減るのでだいぶ軽くなる
  • イベント処理機構の改善
    • killされたときにすぐ終了しない問題を直す
    • MotionNotifyを圧縮してCPU負荷を低減する

  • 仮想デスクトップ
    • 検討中。少なくともタイル配置が実装できた後
  • 設定ファイルによる設定

実装しない予定の機能

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

  1. WM配下のウィンドウを作ってウィンドウ一覧を表示するあたりが (1)

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