4292
コメント:
|
← 2013-05-10 19:45:44時点のリビジョン15 ⇥
3821
|
削除された箇所はこのように表示されます。 | 追加された箇所はこのように表示されます。 |
行 9: | 行 9: |
* 必要な機能を揃える | |
行 14: | 行 15: |
* 最初はタイトルバーを付けるつもりだったので必要だった * 途中で装飾をやめたのであまり意味がなくなった。でも練習のために実装 * おまけとして、AWTと組み合わせても問題が発生しない |
* 装飾をしないのであまり意味はないが、reparentすることで一部アプリケーションとの相性問題を回避できる |
行 19: | 行 18: |
* マウスによるリサイズはウィンドウ内でのマウスポインタの位置に応じた斜め4方向に可能 | * リサイズは斜め4方向に可能 |
行 21: | 行 20: |
* 画面端へのスナップ(移動終了時にControlを押してると無効化) * 最小化/最大化/フルスクリーン * 最小化からの復帰はスタック式に行われる。タスクバーと連携させることで任意に復帰可能 |
|
行 22: | 行 24: |
* キーバインドは今のところヘッダファイルに埋め込み * WMの終了 * 2種類のプログラム(端末とdmenuなどのランチャを想定、プログラム名は今のところソースに埋め込み)の起動 * フォーカス中のウィンドウを閉じる * フォーカス中のウィンドウを隠す * 全部隠す(「デスクトップを表示」に相当) * 最後に隠したウィンドウを表示 * 全部表示 * ウィンドウの巡回(表示されているものだけ) |
* キーバインドはヘッダファイルに埋め込み |
行 32: | 行 26: |
* フォーカス中のウィンドウが閉じられたり隠されたりしたとき、そのウィンドウの前にフォーカスされていたウィンドウにフォーカスする | * EWMH対応 * タスクバーとの連携(lxpanelで動作確認) * コマンドラインからの設定変更 |
行 34: | 行 30: |
== 実装予定の機能(優先度と依存関係による順) == * EWMH対応 * 必要な部分だけ * クライアントによる状態変更要求への応答 * _NET_ACTIVE_WINDOW, _NET_WM_STATE |
== 予定(優先度と依存関係による順) == * ウィンドウのスタック順序に関する明確なポリシーを定める(現在はかなり適当) |
行 40: | 行 33: |
* 複数ディスプレイの認識自体は既にしている * 最大化/フルスクリーン * マルチディスプレイを認識しないと正しい最大化はできない * 最大化とフルスクリーンは違う * タイル配置 * デフォルトはフローティングにする予定 * タスクバーとの連携 * 自前のバーを別のプログラムとして書く予定。特に独自規約で通信したりはしない * _NET_WM_STRUT_PARTIALとか_NET_WM_WORKAREAとかいろいろ |
* ロストしたディスプレイにいたクライアントを移動しないと操作不能になる * 自前のバー * ウィンドウの一覧表示と切り替え程度 * できれば、stdinあたりから読み込んで表示する通知領域 * さらにできれば、システムトレイ * 規約: http://standards.freedesktop.org/systemtray-spec/systemtray-spec-latest.html |
行 52: | 行 42: |
* ウィンドウの再描画が減るのでだいぶ軽くなる | * クライアントウィンドウの再描画が減るのでだいぶ軽くなる |
行 56: | 行 46: |
* Xlibだと比較的簡単だが、イベントキューの中をいじれないXCBだと難しい | |
行 58: | 行 49: |
* 設定ファイルまたはコマンドライン引数による設定 * キーバインドとか色とか |
|
行 72: | 行 61: |
* ページャとの連携 * タイル化を実装した場合、ページャはあまり役に立たない * _NET_CLIENT_LIST_STACKINGを省略 |
mn
概要
現在つくってるWM。特徴は以下の通り。
- XlibでなくXCBを使用
- スタック型(タイル配置を実装予定)
- focus-follows-mouse
- マルチディスプレイ対応(予定)
- ウィンドウ枠だけの控えめな装飾
- 必要な機能を揃える
名前の由来は「まどならべ」。ある程度使い物になるところまで行ったらソースを公開する。
実装済みの機能
- re-parenting
- 装飾をしないのであまり意味はないが、reparentすることで一部アプリケーションとの相性問題を回避できる
- マウスによるウィンドウの移動とリサイズ
つかめる部分(タイトルバー)が無いので、ModKey+ドラッグの方式
- リサイズは斜め4方向に可能
- サイズヒントに対応(ただしアスペクト比を除く)。端末とかはちゃんと文字単位でリサイズする
- 画面端へのスナップ(移動終了時にControlを押してると無効化)
- 最小化/最大化/フルスクリーン
- 最小化からの復帰はスタック式に行われる。タスクバーと連携させることで任意に復帰可能
- キーボードによる操作
- キーバインドはヘッダファイルに埋め込み
- フォーカス履歴
- EWMH対応
- タスクバーとの連携(lxpanelで動作確認)
- コマンドラインからの設定変更
予定(優先度と依存関係による順)
- ウィンドウのスタック順序に関する明確なポリシーを定める(現在はかなり適当)
- マルチディスプレイ対応
- ロストしたディスプレイにいたクライアントを移動しないと操作不能になる
- 自前のバー
- ウィンドウの一覧表示と切り替え程度
- できれば、stdinあたりから読み込んで表示する通知領域
- さらにできれば、システムトレイ
必須ではないが実装したい機能(優先順位なし)
- ウィンドウ枠だけの移動/リサイズ
- クライアントウィンドウの再描画が減るのでだいぶ軽くなる
やってみたけれど何かがおかしくなった1ので保留
- イベント処理機構の改善
MotionNotifyを圧縮してCPU負荷を低減する
- Xlibだと比較的簡単だが、イベントキューの中をいじれないXCBだと難しい
- 仮想デスクトップ
- 検討中。少なくともタイル配置が実装できた後
実装しない予定の機能
- タイトルバー
- ウィンドウタイトルを表示する部分として実装するつもりだったが、gravityの処理をちゃんと書くのに挫折して投げた
- 文字列描画にcairoやpangoを使うので、依存関係が一つ増える
- タスクバーを用意することに決めたので、タイトルの表示はそちらでまかなうことに
- 依存関係を分離できる
- gravityに関してはまともなものに書き直したので、後で欲しくなったら再検討する
- デスクトップをクリックしてポップアップするタイプのメニュー
- ツールキットなしで自前のメニュー機構を実装するのはかなり面倒
- タイル配置と相性が悪すぎる
_NET_WM_WINDOW_TYPE_DESKTOPなウィンドウが存在すると使い物にならない
- ページャとの連携
- タイル化を実装した場合、ページャはあまり役に立たない
- _NET_CLIENT_LIST_STACKINGを省略
サーバをgrabしたら自分のリクエストまで処理されなくなった (1)