Ian*_* B. 7 python unity compiz gtk application-development
我想制作一个 Gtk.Window,它固定在桌面上,就像一个桌面小部件。我发现我可以通过设置将self.set_type_hint(Gdk.WindowTypeHint.DESKTOP)其保持在所有窗口下方、不可移动且对 Show Desktop Unity 插件不敏感来做到这一点。但是,如果您单击小部件外部的桌面区域,则窗口隐藏在桌面后面,我无法将其取回(我必须终止程序)。
处理这个问题的最佳方法是什么?还有其他设置吗?我发现如果我设置 skip_taskbar 提示并停用 compiz 中的设置,我也可以得到一个窗口来忽略 Show Desktop 命令,但我宁愿不要乱用人们的 compiz 设置来获得这种效果。
编辑: 找出忽略显示桌面(见下文),但仍然无法让它跳过启动栏。DESKTOP 窗口提示适用于此,但具有上述缺点。我还尝试在 .desktop 文件中设置 WM_CLASS,但 Unity 似乎忽略了这一点。
想通了……您需要将类型提示Gdk.WindowTypeHint.DOCK设置为然后还设置skip_taskbar_hintOR skip_pager_hint。
编辑这有效,但即使使用skiptaskbar,该窗口仍然在启动器栏中显示为图标。我需要一个更好的方法......
EDIT2明白了!问题来自栏中的其他启动器,它们与我试图制作桌面小部件的程序具有相同的 WMClass。为了区分自己,您需要在程序中以及其 .desktop 启动器中设置窗口的 WMClass:
在代码中:
Gtk.Window.set_wmclass(WMname,WMclass)
Run Code Online (Sandbox Code Playgroud)
在 .desktop Launcher 中:
StartupWMClass=WMname
Run Code Online (Sandbox Code Playgroud)