是否可以从应用程序中检查其菜单是否显示在窗口中或面板中(AppMenu)?
我当然可以检查环境是否是 Unity,但有些人在 KDE 或经典 GNOME 中使用 AppMenu,所以我正在寻找更通用的方法。
我更喜欢一种适合 C 语言并在 Ubuntu 11.10 中运行的方式。
答案1
以下是适用于任何 Linux 发行版的更完整的答案:
static int menu_proxy = -1;
typedef void *(*KVoidPtoF)();
void *proxylib;
KVoidPtoF gtk_menu_proxy_get;
menu_proxy = 0;
proxylib = dlopen("libappmenu.so", RTLD_NOLOAD | RTLD_LAZY);
if (proxylib)
{
gtk_menu_proxy_get = (KVoidPtoF)dlsym(proxylib,
"ubuntu_menu_proxy_get");
if (gtk_menu_proxy_get && (*gtk_menu_proxy_get)() != 0)
menu_proxy = 1;
}
答案2
我在这里找到了一个更好的解决方案:https://wiki.ubuntu.com/MenuBar#Advertising_the_presence_of_the_menu_bar。
答案3
我不确定如何具体检查 Qt 模块。要查找 GTK 模块,您可以查找环境变量 UBUNTU_MENUPROXY。如果您想确保菜单出现在应用程序中(并且如果可能的话被导出),那么您可以将 APPMENU_DISPLAY_BOTH 设置为 1。如果您想查看 indicator-appmenu 主机是否正在使用菜单,您可以在 DBus 上查找众所周知的名称“com.canonical.AppMenu.Registrar”。如果它存在,则它正在托管菜单。