20.04 上不显示应用程序状态图标

20.04 上不显示应用程序状态图标

我有一个使用 gtk3 在 Ubuntu 22.04 上构建的测试应用程序,它基本上执行以下操作来创建带有附加菜单的状态图标:

#include <gtk/gtk.h>
//#include <glib/glib.h>


static void trayExit(GtkMenuItem *item,
                     gpointer user_data)
{
    printf("Quit\n");
    gtk_main_quit();
}


static void trayIconOnClick(GtkStatusIcon* statusIcon,
                            gpointer trayMenu)
{
    printf("Clicked on tray icon\n");
    gtk_menu_popup_at_pointer(GTK_MENU(trayMenu), nullptr);
}


static void trayIconOnMenu(GtkStatusIcon* statusIcon,
                           guint button, 
                           guint activateTime,
                           gpointer trayMenu)
{
    printf("Popup menu\n");
    gtk_menu_popup(GTK_MENU(trayMenu), nullptr, nullptr,
                   gtk_status_icon_position_menu, statusIcon,
                   button, activateTime);
}


static GtkWidget* createTrayMenu()
{
    auto* menu         = gtk_menu_new();
    auto* menuItemExit = gtk_menu_item_new_with_label ("Exit");

    g_signal_connect(G_OBJECT(menuItemExit), "activate", G_CALLBACK(trayExit), nullptr);
    gtk_menu_shell_append (GTK_MENU_SHELL(menu), menuItemExit);
    gtk_widget_show_all(menu);
    return menu;
}


static GtkStatusIcon *createTrayIcon()
{
        auto* trayMenu = createTrayMenu();
        auto* trayIcon = gtk_status_icon_new();

        g_signal_connect(G_OBJECT(trayIcon), "activate", 
                         G_CALLBACK(trayIconOnClick), trayMenu);
        g_signal_connect(G_OBJECT(trayIcon), 
                         "popup-menu",
                         G_CALLBACK(trayIconOnMenu), trayMenu);
        gtk_status_icon_set_from_file(trayIcon, "/tmp/icon.png");
        gtk_status_icon_set_visible(trayIcon, TRUE);
        return trayIcon;
}

int main(int argc, char **argv)
{
        gtk_init(0, nullptr);
        auto trayIcon = createTrayIcon();
        gtk_main();
        return 0;
}

更多信息:

ubuntu: libgtk-3-dev
centos: gtk3-devel

g++ `pkg-config --cflags gtk+-3.0` -o main main.cpp `pkg-config --libs gtk+-3.0`
`pkg-config --cflags glib-2.0` `pkg-config --libs glib-2.0`

它在 22.04 上运行良好。但是,当我将应用程序复制到 20.04 时,状态图标不显示。应用程序正在运行,ldd 显示它正在链接到正确的库,等等。

Ubuntu 20.04 对状态图标的处理方式是否不同?我在 20.04 上安装了一些使用它们的应用程序,但我认为它们不是用 C 编写的。

相关内容