web-dev-qa-db-ja.com

デスクトップを表示してランチャーに表示されないようにするGtkウィンドウを作成します

デスクトップに固定され、デスクトップウィジェットのように機能するGtk.Windowを作成したい。 self.set_type_hint(Gdk.WindowTypeHint.DESKTOP)を設定することでこれを実行できることがわかりました。これにより、すべてのウィンドウの下に表示され、Show Desktop Unityプラグインに対して不動で無反応になります。ただし、ウィジェットの外側のデスクトップ領域をクリックすると、ウィンドウがデスクトップの後ろに隠れてしまい、元に戻すことができません(プログラムを強制終了する必要があります)。

これを処理する最良の方法は何ですか?別の設定はありますか? skip_taskbarヒントを設定し、compizで設定を無効にすると、デスクトップを表示コマンドを無視するウィンドウを取得できることもわかりましたが、この効果を得るために人々のcompiz設定をいじりたくないです。

編集:無視デスクトップの表示(以下を参照)を見つけましたが、ランチャーバーをスキップすることはできません。 DESKTOPウィンドウヒントはそのために機能しましたが、上記の欠点があります。また、.desktopファイルでWM_CLASSを設定してみましたが、Unityはそれを無視しているようです。

7
Ian B.

それを考え出した...タイプヒントをGdk.WindowTypeHint.DOCKに設定してから、skip_taskbar_hint OR skip_pager_hintのいずれかを設定する必要があります。

EDITこれは機能しますが、skiptaskbarを使用しても、ウィンドウはランチャーバーにアイコンとして表示されます。もっと良い方法が必要です。

EDIT2了解!この問題は、デスクトップウィジェットを作成しようとしたプログラムと同じWMClassを持つバーの他のランチャーから発生しました。区別するには、プログラム内およびその.desktopランチャー内でウィンドウのWMClassを設定する必要があります。

コード内:

Gtk.Window.set_wmclass(WMname,WMclass)

.desktop Launcherで:

StartupWMClass=WMname
7
Ian B.

私はあなたが望むとおりに動作するアプリケーションを実行しています:それはデスクトップモードで rainlendar2 です。 XwinInfo出力:

 xwininfo:ウィンドウID:0x1200086 "rainlendar2" 
 
ウィンドウマネージャーのヒント:
クライアントは入力または入力フォーカスを受け入れます:はい
初期状態は正常です状態
すべてのデスクトップに表示されます
ウィンドウタイプ:
ドック
ウィンドウの状態:
ページャーをスキップ
タスクバーをスキップ
下
スティッキー

これがどのようにGtk +/Gdkフラグに変換されるかは見られるはずです。しかし、stickinessが役割を果たすようです。

1
aquaherd