【问题标题】:GTK+ 3 StatusIcon replacementGTK+ 3 状态图标替换
【发布时间】:2017-06-14 13:08:33
【问题描述】:

我希望我的 GTK 应用程序在系统托盘中有一个状态图标,我使用 StatusIcon 可以很好地工作,但是这已被弃用:

gtk_status_icon_new 自 3.14 版以来已被弃用,不应在新编写的代码中使用。

使用通知

文档说“使用通知”,但我不知道这实际上意味着什么。我将其解释为“使用桌面通知”,但据我所知,这用于完全不同的目的。我想要一个始终可见的系统托盘图标,而不是临时弹出通知。尽管如此,我找不到任何其他似乎是“通知”的意思。

是否存在 GtkStatusIcon 的新替代品,它在系统托盘中提供一个图标,支持接收鼠标点击/滚动信号并显示弹出菜单?

【问题讨论】:

    标签: gtk gtk3 system-tray trayicon


    【解决方案1】:

    对于更高版本的 GTK+ 3,StatusIcon 已被弃用,您可以使用以下代码来防止看到任何关于弃用的警告:

    #pragma GCC diagnostic push
    #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
    // Insert Status Icon Code Here
    #pragma GCC diagnostic pop
    

    虽然它已被弃用,但直到 GTK4 才从 GTK 中删除。

    对于 GTK4 和其他版本,我创建了TIL - Tray Icon Library,它应该适用于任何 GTK 版本。有示例代码如何与 GTK4 一起使用。目前它只能通过XEMBED 使用 XCB,但将来会支持更多的后端。长期目标是支持大多数不同的后端在不同情况下创建托盘/状态图标。

    基本上它的工作原理是,我们完全使用我们想要的后端创建托盘图标,在本例中为 X11。然后我们得到 GTK Widget 的 X-Connection 和 X Window ID。然后我们只需将 GTK Widget 的 X Window ID 添加为我们使用 X 创建的托盘图标的子项。这样就可以在托盘图标中插入任何 GTK Widget。 X 中的托盘图标实际上只是卡在托盘中的窗口。并非所有小部件都能正常工作。

    【讨论】:

      【解决方案2】:

      很遗憾,它们指的是桌面通知。如果你还想使用系统托盘图标,那么继续使用 GtkStatusIcon;请注意,它可能很快就会被删除。 (关键是桌面通知比状态图标更多,但我相信还有其他原因。GTK+ 可能不应该处理这样的桌面环境特定的东西......没有什么能阻止任何人制作GtkStatusIcon 自己替换了,不过好像还没有人这样做。)

      【讨论】:

      • 这令人失望,我希望 GTK 会努力保持比这更多的功能。我想我会继续使用 GtkStatusIcon 并希望在将其删除之前出现替代方案。感谢您清理它。
      • 它不会在 GTK+ 3 中被删除,但它可能会在 GTK+ 4 中被删除,它不向后兼容。因此,当 GTK+ 版本出现时,您不必担心,直到您迁移您的代码。它可能会在以后的版本中被删除;我不会知道的。至于多功能性,GTK+ 也不提供通知!你必须去一个单独的库,比如 libnotify,才能做到这一点。
      • 它已经从 Gtk4 中移除了。此外,AppIndicator 是桌面上的有效替代品,托盘图标是其设计的一部分(KDE 5,Unity),但它们不是 Gnome 设计的一部分。
      • 弃用状态图标是 Gtk 做出的最糟糕的决定。通知根本不是一回事,根本不提供状态图标的作用。开发人员主要使用状态图标来通知通知的假设是完全荒谬的。他们主要使用它来创建您始终希望运行并易于访问但不希望妨碍您的实用程序。通知对于这种功能完全没有用处。
      • Linux Mint 决定实现自己的 GtkStatusIcon 分支,命名为 XApPStatusIcon
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-15
      相关资源
      最近更新 更多