web-dev-qa-db-ja.com

appmenuがアクティブかどうかを検出する方法は?

メニューがウィンドウまたはパネル(AppMenu)に表示されるかどうかをアプリケーションから確認することはできますか?

もちろん、環境がUnityであるかどうかを確認することはできますが、KDEまたは従来のGNOMEでAppMenuを使用する人もいるため、より普遍的な方法を探しています。

私はC言語に適しており、Ubuntu11.10で作業する方法を好みます。

2
Dmitry Shachnev

私はここでより良い解決策を見つけました: https://wiki.ubuntu.com/MenuBar#Advertising_the_presence_of_the_menu_bar

1
Dmitry Shachnev

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
dajoke

Qtモジュールを具体的に確認する方法がわかりません。 GTKモジュールを探すには、環境変数UBUNTU_MENUPROXYを探すことができます。メニューがアプリケーションに表示される(そして可能であればエクスポートされる)ことを確認したい場合は、APPMENU_DISPLAY_BOTHを1に設定できます。indicator-appmenuホストがメニューを取得しているかどうかを確認したい場合は、既知の名前を探すことができます。 DBusの「com.canonical.AppMenu.Registrar」。存在する場合は、メニューをホストしています。

0
Ted Gould