私のアプリケーションがどのデスクトップ/ワークスペース上にあるかを発見および/または設定することに進歩はありましたか (もちろん Linux/Solaris の下で)?
2 に答える
最新のウィンドウ マネージャーでのデスクトップの検出/設定は_NET_WM_DESKTOP
、EWMH 仕様 ( http://packages.debian.org/search?keywords=proftpd-basic&searchon=names&suite=all§ion=all )からプロパティを読み取り/設定することによって行われます。
この機能を公開するきちんとカプセル化された API については知りませんが、Google はhttp://code.google.com/p/ewm/source/browse/trinity/fusion-X11/trunk/src/main/javaを見つけました/org/fusion/x11/ewmh/NetFrameExtents.javaから始めることができます。
私は、「NetFrmeExtents.java」によって事前にリンクされているプロジェクトの作成者です。
これが私の答えです:
これは、swing/awt が今までに実装していない限り、不可能ではないにしても、純粋な Java で行うのは困難です。最も簡単な (そして唯一の?) 方法は、JNI を使用して xlib/xcb を介して実行することです。しかし、あなたが求めることをすることは可能です。
あなたが望むものを助けることができるEWMHと呼ばれるデスクトップ規則があります。必要な手順の基本的な順序は次のとおりです。
- アプリケーションのウィンドウ ID を取得します。このGoogleを実行するには、awtでウィンドウハンドル/ウィンドウIDを取得する方法.
- 次に、アトムによって定義されたいくつかの「プロパティ」を読み取る必要があります。これが何なのかわからない場合は、xlib/xcb のウィンドウからプロパティを読み取る方法を参照してください。
- EWMH には、ウィンドウ マネージャーによって定義されたすべての仮想デスクトップを一覧表示するプロパティがあります。http://standards.freedesktop.org/wm-spec/wm-spec-1.3.html#id2449367を参照してください。
- プロパティをアプリケーションのウィンドウのプロパティに設定します。http://standards.freedesktop.org/wm-spec/wm-spec-1.3.html#id2507080を参照して、アプリケーションを配置する仮想デスクトップの番号を指定してください。
すべてを正しく実行し、ウィンドウ マネージャが ewmh をサポートしている場合 (ほとんどの場合)、動作するはずです。