创建一个对Show Desktop不敏感的Gtk窗口,并且不会在Launcher中显示

我想创建一个固定在桌面上的Gtk.Window,就像一个桌面小部件。 我发现我可以通过设置self.set_type_hint(Gdk.WindowTypeHint.DESKTOP)来实现这一点, self.set_type_hint(Gdk.WindowTypeHint.DESKTOP)其保持在所有窗口之下,对Show Desktop Unity插件不可移动self.set_type_hint(Gdk.WindowTypeHint.DESKTOP)敏感。 但是,如果您单击窗口小部件外部的桌面区域,窗口将隐藏在桌面后面,我无法取回它(我必须终止该程序)。

处理这个问题的最佳方法是什么? 还有其他设置吗? 我发现如果我设置了skip_taskbar提示并在compiz中停用了一个设置,我也可以得到一个忽略Show Desktop命令的窗口,但我宁愿不用人们的compiz设置来解决这个问题。

编辑:找出忽略显示桌面(见下文),但仍然无法让它跳过启动栏。 DESKTOP窗口提示适用于此,但具有上述缺点。 我还在.desktop文件中设置了WM_CLASS,但Unity似乎忽略了这一点。

想出来……你需要将类型提示设置为Gdk.WindowTypeHint.DOCK然后设置skip_taskbar_hintskip_pager_hint

编辑这是有效的,但即使使用skiptaskbar,窗口仍然会在启动栏中显示为一个图标。 我需要一个更好的方法……

EDIT2知道了! 问题来自于酒吧中的其他发射器与我尝试制作桌面小工具的程序具有相同的WMClass。 要区分自己,您需要在程序中以及.desktop启动器中设置窗口的WMClass:

在代码中:

 Gtk.Window.set_wmclass(WMname,WMclass) 

在.desktop启动器中:

 StartupWMClass=WMname 

我有一个运行的应用程序完全按照您的意愿运行:它是桌面模式下的rainlendar2 。 XwinInfo输出:

 xwininfo:窗口ID:0x1200086“rainlendar2”

  窗口管理器提示:
      客户接受输入或输入焦点:是
      初始状态为正常状态
      显示在所有桌面上
      窗口类型:
          docker
      窗口状态:
          跳过寻呼机
          跳过任务栏
          下面
          黏

如何转换为Gtk + / Gdk标志。 但看起来粘性起着重要作用。