检测 ubuntu unity 全局菜单的使用情况

检测 ubuntu unity 全局菜单的使用情况

我正在将一个商业应用程序移植到 Linux,它将在多个发行版上运行。在 Ubuntu 上运行时,GtkMenuBar 将从应用程序窗口中移除并放置在主全局菜单栏上。这很好……但是在移除菜单的应用程序窗口中有一个相应的空白区域(它与 GtkFixed 一起放置)。我需要能够检测到这种情况何时发生(并且仅当它在任何发行版中发生时),以便我可以可靠地删除空白区域。

检测此问题的最佳方法是什么?(即通过 gtk_widget_... 调用)对 GtkMenuBar 做了什么来实现此目的?谢谢。

答案1

问题不在于对 GtkMenuBar 做了什么特别的处理(只是隐藏了它)。问题在于您使用 GtkFixed 来定位它,因此当 MenuBar 消失时,它不会自动调整大小。

您使用 GtkFixed 来定位事物,而不是使用 GTK+ 的常规框布局结构,有什么特殊原因吗?您可能想研究使用 GtkApplication 和/或 GtkBuilder 来创建和呈现用户界面,而不是使用 GtkFixed 的绝对定位。

如果您希望继续使用 GtkFixed,则需要监视 GtkMenuBar 上的属性(或信号),并在 GtkMenuBar 隐藏时手动重新定位和/或调整窗口中其他小部件的大小。

答案2

这是我最终不得不针对多个发行版采取的措施以及用户设置例外的可能性:

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;
}

相关内容