创建一个对显示桌面不敏感且不会在启动器中显示的 Gtk 窗口

创建一个对显示桌面不敏感且不会在启动器中显示的 Gtk 窗口

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

处理此问题的最佳方法是什么?还有其他设置吗?我发现,如果我设置 skip_taskbar 提示并停用 compiz 中的设置,我也可以让窗口忽略“显示桌面”命令,但我不想乱动人们的 compiz 设置来获得此效果。

编辑: 弄清楚了忽略“显示桌面”(见下文),但仍然无法让它跳过启动器栏。DESKTOP 窗口提示对此有效,但有上述缺点。我也尝试在 .desktop 文件中设置 WM_CLASS,但 Unity 似乎忽略了这一点。

答案1

明白了...您需要将类型提示设置为,Gdk.WindowTypeHint.DOCK然后还设置skip_taskbar_hintOR skip_pager_hint

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

编辑2明白了!问题出在栏中的其他启动器与我试图将其设为桌面小部件的程序具有相同的 WMClass。为了区分它,您需要在程序内以及其 .desktop 启动器内设置窗口的 WMClass:

在代码中:

Gtk.Window.set_wmclass(WMname,WMclass)

在 .desktop Launcher 中:

StartupWMClass=WMname

答案2

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

xwininfo:窗口 ID:0x1200086“rainlendar2”

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

这如何转化为 Gtk+/Gdk 标志还有待观察。但似乎粘性发挥作用。

相关内容