📜  什么是 appmenu-gtk-module - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:21:45.838000             🧑  作者: Mango

什么是 appmenu-gtk-module - Shell/Bash

简介

appmenu-gtk-module是一个GTK+模块,它使得在GNOME Shell、Unity、XFCE和其他一些桌面环境中,程序的菜单栏可以自动地集成到面板中。该模块自动探测并使用正在运行的桌面环境,并在不同桌面环境下适配。

如何安装

通常的Linux发行版都会自带appmenu-gtk-module,如果你的发行版没有预装,你可以使用以下命令来安装:

sudo apt-get install appmenu-gtk-module
如何使用

将以下代码添加到您的GTK+应用程序代码中:

if (g_file_test ("/usr/lib/gtk-3.0/modules/libappmenu-gtk-module.so", G_FILE_TEST_EXISTS))
g_setenv ("UBUNTU_MENUPROXY", "libappmenu-gtk-module", TRUE);

这段代码检查是否安装了appmenu-gtk-module,如果已经安装,则设置环境变量UBUNTU_MENUPROXY以启用菜单栏集成。

在使用GTK+ 3时,您也可以在GtkApplication中使用该模块:

GtkApplication *app;
g_setenv ("UBUNTU_MENUPROXY", "libappmenu-gtk-module", FALSE);
app = gtk_application_new ("com.example.myapp", G_APPLICATION_FLAGS_NONE);
g_object_set (app, "use-ubuntu-menubar", TRUE, NULL);
最佳实践

将菜单栏集成到面板可能会导致应用程序无法访问原生的菜单栏,因此,您应该将应用程序的菜单栏移动到应用程序窗口的工具栏上。

GtkWindow *window = gtk_window_new ();
GtkWidget *menu = create_menu ();
GtkWidget *toolbar = gtk_toolbar_new ();
GtkToolItem *item = gtk_tool_item_new ();
GtkWidget *image = gtk_image_new_from_icon_name ("view-menu-symbolic", GTK_ICON_SIZE_SMALL_TOOLBAR);

gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);

if (menu)
{
    GtkWidget *menu_button = gtk_menu_button_new ();
    gtk_container_add (GTK_CONTAINER (menu_button), image);
    gtk_menu_button_set_menu (GTK_MENU_BUTTON (menu_button), menu);
    gtk_widget_show_all (menu_button);
    gtk_toolbar_insert (GTK_TOOLBAR (toolbar), menu_button, -1);
}

gtk_container_add (GTK_CONTAINER (window), toolbar);

create_menu()是一个生成应用程序菜单的函数,其返回值是一个包含菜单项的GtkWidget 对象。使用gtk_toolbar_insert()将工具栏插入到窗口中,然后将生成的应用程序菜单放置在工具栏中,从而实现了菜单栏的嵌入。

总结

appmenu-gtk-module是一个有用的GTK+模块,它可以将应用程序的菜单栏集成到面板中,从而为用户提供更多空间来展示应用程序的内容。将其添加到您的GTK+应用程序中可以提高用户体验,并使您的应用程序更加成熟和专业。