ログイン
編集不可のページディスカッション情報添付ファイル

2012-04-30 23:56:36時点のリビジョン2

メッセージを消す
clear/wm_devel/2012-04-30

MMA

Client

ウィンドウマネージャ界隈(?)では、ウィンドウマネージャにmanageされるウィンドウのことをClientというらしい。いくつかのWMのソースを読んだところ、ウィンドウを管理するための構造体名などにClientという名称がよく見受けられる。Xサーバ/Xクライアントという構造では、WMはむしろクライアントの一つだが、要するに「(他の)クライアント」という意味だろう。ウィンドウマネージャは一つのディスプレイに対して同時に一つしか存在しないはずなので問題はないのか。

いい感じにウィンドウを配置する

アグレッシブにウィンドウのサイズを変えまくるとUIのレイアウトが崩壊したりして幸せになれないので、適切な表示サイズが存在するウィンドウに関してはそれを尊重してやらなければならない。少し調べてみた所、だいたい以下の3つに注意する必要があるらしい。

  1. override_redirectフラグ: このフラグが立っているウィンドウをウィンドウマネージャは無視すべき(どうやら自前で移動・リサイズ制御を行うウィンドウが設定するらしい)

    • xwininfoコマンドで確かめられる。試しにibusのツールバーを調べてみたらyesになっていた

  2. WM_TRANSIENT_FORプロパティ: クライアント側で設定される、一時的なトップレベルウィンドウ(ex.ダイアログボックス)であることを示すプロパティ

  3. WM_NORMAL_HINTSプロパティ: クライアント側で設定される、そのウィンドウの標準の状態におけるサイズヒント

    • プロパティはxpropコマンドで確かめられる

dwmの実装を読んでみたところ、以下のようになっていた。

  1. override_redirectが立っているものは完全に無視(そもそもClientのリストに入れない)

  2. WM_TRANSIENT_FORの設定されているものは、フローティング表示するように設定(isfloating=True)

  3. WM_NORMAL_HINTSの設定されているものは、「最小幅=最大幅かつ最小高さ=最大高さ」の場合(要するに厳密にサイズを指定してきている場合)、固定サイズフラグを立て(isfixed=True)、フローティング表示するように設定(isfloating=True)

ということで、このあたりをまともに扱うようにすればある程度は不幸を避けられるはず。