3

プログラムでウィンドウを移動して、部分的に画面に表示しようとしています。たとえば、VLC のタイトル バーをクリックしてドラッグすると、ウィンドウの半分だけが表示されます。

この結果を出力すると、wmctrl -lG問題なく動作します。

0x04a00011  0 -293 138  600  420  HEVM002 VLC media player

ただし、画面に戻してその位置を複製しようとすると、機能せず、ウィンドウが向こう側にクリップされます。

wmctrl -r "VLC media player" -e 0,-200,0,800,600

いくつかのウィンドウ マネージャでテストしましたが、xfwm では正常に動作するようですが、compiz では動作しないようです。ウィンドウを画面外に移動できるようにするために設定できるフラグなどはありますか?

4

1 に答える 1

6

ウィンドウマネージャーの下で実行している場合、これは完全にウィンドウマネージャー次第です。部分的なオフスクリーン位置を強制するフラグがあるかどうかは、それがどのウィンドウ マネージャーであるかによって異なります。

これを達成する唯一のウィンドウマネージャーに依存しない方法は、ウィンドウをウィンドウにすることoverride_redirectです。しかしもちろん、これはウィンドウがもはや管理されていないことを意味します。通常のウィンドウに戻すと、ウィンドウ マネージャーが再度ウィンドウを管理するようになります。これは、ウィンドウ マネージャーによっては、ウィンドウを再び境界内に強制することを意味します。

そうは言っても、wmctrl のソース コードを見ると、ウィンドウ マネージャーでサポートされている場合は使用し、サポートされていない場合は(または同様の方法で)_NET_MOVERESIZE_WINDOWフォールバックします。XMoveResizeWindowただし、最初のケースでは、位置の値をunsigned long最初にキャストします。これは、事実上、負の値が失われることを意味します。2 番目のケースでは、負の値は「動かない」ことを示しているように見えるので、運もありません。

xdotool windowmove代わりに、負の値を正しく処理する を使用してみてください。また、wmctrl に対してバグを報告することも検討してください。

于 2016-04-11T12:49:20.583 に答える