2

私の罪のために (そして学習体験を楽しむために)、私はウィンドウ マネージャーを作成しています (私は知っています、知っています)。

Python と XCB (python-xpyb) を使用しています。

これまでのところ、ルート ウィンドウで SubStructureRedirect マスクを使用する必要があることがわかっており、アプリケーションのトップレベル ウィンドウに関連するイベントが正常に渡されています。xterm を起動してこれをテストしています。

ConfigureRequestEvent を取得し、その後一時停止し、さらに別の ConfigureRequestEvent、さらに MapRequestEvent を取得します。

MapRequestEvent を取得したら、 を呼び出しますconnection.core.MapWindowChecked(e.window)。これは機能しますが、1 ピクセルまたは 2 幅/高さのウィンドウをマップします。

私の質問は、ウィンドウを正しいサイズにするために ConfigureRequestEvent で何をすべきかということです (それが不足していると仮定して)。

より正確には、私は正確に何と呼んでいますか? MapWindowChecked は当然の選択でしたが、幅/高さを実際に構成する方法が見つからないようです。私はそれがConfigureWindowだと推測していますが、受け入れる引数は私にはわかりにくいようです。前回呼び出したときは xcb.xproto.CW.EventMask を使用しましたが、CW のどのフラグも幅/高さに関連しているようには見えません。

PS このすべてに関するドキュメントは、私には非常にわかりにくいようです。xcb を使用していると思われる 2 つの Python ウィンドウ マネージャーを見てきましたが、それらは追加機能を備えた独自のカスタム バージョンを使用しているようです。また、実行中のウィンドウ マネージャー (デバッガーのウィンドウのマッピングも担当) の検査/デバッグは PITA であるため、ここで質問します。おそらく、2 台のマシンまたは VM などを使用する方がよいでしょう。

ありがとう。

4

1 に答える 1

1

簡単な答えは、ConfigureWindow を呼び出してウィンドウ (サイズ、スタッキングなど) を構成することです。長い答えは、ポリシーを課し、XSizeHints などの仕様を尊重することです。いくつかの既存の WM のソースを見て、それらが何をするかを理解するのが最善です。何をするかは、目的の UI によって異なります。

それを機能させるための最も簡単な方法は、ポリシーやヒントのオーバーライドなしで、リクエストが要求するとおりに ConfigureWindow を実行することです。しかし、すぐに多くのユーザビリティの問題が発生し、さらにスマートな機能を追加する必要があるでしょう。

于 2011-05-01T22:48:38.277 に答える