2795
コメント:
|
4378
|
削除された箇所はこのように表示されます。 | 追加された箇所はこのように表示されます。 |
行 5: | 行 5: |
* スタック型(タイル化を実装予定) * 控えめな装飾(ウィンドウ枠だけ) |
* スタック型(タイル配置を実装予定) * focus-follows-mouse * マルチディスプレイ対応(予定) * ウィンドウ枠だけの控えめな装飾 |
行 16: | 行 18: |
* 装飾のないWMによくある、ModKey+ドラッグの方式 | * つかめる部分(タイトルバー)が無いので、ModKey+ドラッグの方式 |
行 19: | 行 21: |
* キーボードによる操作 * キーバインドは今のところヘッダファイルに埋め込み * WMの終了 * 2種類のプログラム(端末とdmenuなどのランチャを想定、プログラム名は今のところソースに埋め込み)の起動 * フォーカス中のウィンドウを閉じる * フォーカス中のウィンドウを隠す * 全部隠す(「デスクトップを表示」に相当) * 最後に隠したウィンドウを表示 * 全部表示 * フォーカス履歴 * フォーカス中のウィンドウが閉じられたり隠されたりしたとき、そのウィンドウの前にフォーカスされていたウィンドウにフォーカスする |
|
行 21: | 行 34: |
* キーボードによる操作 * WMからウィンドウを閉じられるようにする * キー操作の仕組みさえ実装できればすぐ書ける * WMからプログラムを起動できるようにする * 同上 * 端末とランチャ(dmenuとか)さえ起動できればいい * 最大化/最小化 * 最小化したものを復帰する手段が必要 * Alt-Tab的なのが用意できると良いが、正直面倒<<FootNote(WM配下のウィンドウを作ってウィンドウ一覧を表示するあたりが)>> * 「最後に最小化したものを元に戻す」を実装する予定(要するにスタック) * タイル化 |
* クライアントによる最小化/復帰/フルスクリーン要求への応答 * フルスクリーン化のトリガー * 最大化/フルスクリーン * マルチディスプレイを認識しないと正しい最大化はできない * 最大化とフルスクリーンは違う * マルチディスプレイ対応 * 複数ディスプレイの認識自体は既にしている * タイル配置 * デフォルトはフローティングにする予定 |
行 36: | 行 47: |
* 必要な部分だけ * 仮想デスクトップ(付けるかは検討中) * 設定ファイルによる設定 |
* 必要な部分だけ。タスクバーの実装と並行して行う == 必須ではないが実装したい機能(優先順位なし) == * ウィンドウ枠だけの移動/リサイズ * ウィンドウの再描画が減るのでだいぶ軽くなる * やってみたけれど何かがおかしくなった<<FootNote(サーバをgrabしたら自分のリクエストまで処理されなくなった)>>ので保留 * イベント処理機構の改善 * MotionNotifyを圧縮してCPU負荷を低減する * 仮想デスクトップ * 検討中。少なくともタイル配置が実装できた後 * 設定ファイルまたはコマンドライン引数による設定 * キーバインドとか色とか |
行 47: | 行 67: |
* デスクトップをクリックしてポップアップするタイプのメニュー * ツールキットなしで自前のメニュー機構を実装するのはかなり面倒 * タイル配置と相性が悪すぎる * `_NET_WM_WINDOW_TYPE_DESKTOP`なウィンドウが存在すると使い物にならない |
mn
概要
現在つくってるWM。特徴は以下の通り。
- XlibでなくXCBを使用
- スタック型(タイル配置を実装予定)
- focus-follows-mouse
- マルチディスプレイ対応(予定)
- ウィンドウ枠だけの控えめな装飾
名前の由来は「まどならべ」。ある程度使い物になるところまで行ったらソースを公開する。
実装済みの機能
- re-parenting
- 最初はタイトルバーを付けるつもりだったので必要だった
- 途中で装飾をやめたのであまり意味がなくなった。でも練習のために実装
- おまけとして、AWTと組み合わせても問題が発生しない
- マウスによるウィンドウの移動とリサイズ
つかめる部分(タイトルバー)が無いので、ModKey+ドラッグの方式
- マウスによるリサイズはウィンドウ内でのマウスポインタの位置に応じた斜め4方向に可能
- サイズヒントに対応(ただしアスペクト比を除く)。端末とかはちゃんと文字単位でリサイズする
- キーボードによる操作
- キーバインドは今のところヘッダファイルに埋め込み
- WMの終了
- 2種類のプログラム(端末とdmenuなどのランチャを想定、プログラム名は今のところソースに埋め込み)の起動
- フォーカス中のウィンドウを閉じる
- フォーカス中のウィンドウを隠す
- 全部隠す(「デスクトップを表示」に相当)
- 最後に隠したウィンドウを表示
- 全部表示
- フォーカス履歴
- フォーカス中のウィンドウが閉じられたり隠されたりしたとき、そのウィンドウの前にフォーカスされていたウィンドウにフォーカスする
実装予定の機能(優先度と依存関係による順)
- クライアントによる最小化/復帰/フルスクリーン要求への応答
- フルスクリーン化のトリガー
- 最大化/フルスクリーン
- マルチディスプレイを認識しないと正しい最大化はできない
- 最大化とフルスクリーンは違う
- マルチディスプレイ対応
- 複数ディスプレイの認識自体は既にしている
- タイル配置
- デフォルトはフローティングにする予定
- タスクバーとの連携
- 自前のバーを別のプログラムとして書く予定。特に独自規約で通信したりはしない
- WMをEWMHに従わせることで、既存のタスクバーアプリケーションとも組み合わせて使えるようにする
- EWMH対応
- 必要な部分だけ。タスクバーの実装と並行して行う
必須ではないが実装したい機能(優先順位なし)
- ウィンドウ枠だけの移動/リサイズ
- ウィンドウの再描画が減るのでだいぶ軽くなる
やってみたけれど何かがおかしくなった1ので保留
- イベント処理機構の改善
MotionNotifyを圧縮してCPU負荷を低減する
- 仮想デスクトップ
- 検討中。少なくともタイル配置が実装できた後
- 設定ファイルまたはコマンドライン引数による設定
- キーバインドとか色とか
実装しない予定の機能
- タイトルバー
- ウィンドウタイトルを表示する部分として実装するつもりだったが、gravityの処理をちゃんと書くのに挫折して投げた
- 文字列描画にcairoやpangoを使うので、依存関係が一つ増える
- タスクバーを用意することに決めたので、タイトルの表示はそちらでまかなうことに
- 依存関係を分離できる
- gravityに関してはまともなものに書き直したので、後で欲しくなったら再検討する
- デスクトップをクリックしてポップアップするタイプのメニュー
- ツールキットなしで自前のメニュー機構を実装するのはかなり面倒
- タイル配置と相性が悪すぎる
_NET_WM_WINDOW_TYPE_DESKTOPなウィンドウが存在すると使い物にならない
サーバをgrabしたら自分のリクエストまで処理されなくなった (1)