web-dev-qa-db-fra.com

Détection de l'utilisation du menu global d'Ubuntu Unity

Je porte une application commerciale sur Linux, c'est pour fonctionner sur plusieurs distributions. Lorsqu'il est exécuté sur Ubuntu, le GtkMenuBar est supprimé de la fenêtre de l'application et placé sur la barre de menu globale principale. C'est bien ... mais il y a un espace vide correspondant dans la fenêtre de l'application où le menu a été supprimé (il est placé avec GtkFixed). J'ai besoin de pouvoir détecter quand cela s'est produit (et UNIQUEMENT) quand cela s'est produit à partir de n'importe quelle distribution, afin de pouvoir supprimer de manière fiable l'espace vide.

Quelle est la meilleure façon de détecter cela? (c'est-à-dire via les appels gtk_widget _...) Qu'est-ce qui a été fait à GtkMenuBar pour y parvenir? Merci.

4
dajoke

Voici ce à quoi j'ai finalement dû recourir pour plusieurs distributions et la possibilité pour l'utilisateur de définir une exception:

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

Le problème n'est pas que quelque chose en particulier a été fait au GtkMenuBar (il vient d'être caché). Le problème est que vous utilisez GtkFixed pour le positionner et que les choses ne se redimensionnent pas automatiquement lorsque la barre de menus disparaît.

Y a-t-il une raison particulière pour laquelle vous utilisez un GtkFixed pour positionner des choses, plutôt que d'utiliser la structure de mise en page normale de GTK +? Vous voudrez peut-être envisager d'utiliser GtkApplication et/ou GtkBuilder pour créer et présenter votre interface utilisateur, plutôt que d'utiliser le positionnement absolu avec GtkFixed.

Si vous souhaitez continuer à utiliser GtkFixed, vous devrez regarder une propriété (ou un signal) sur le GtkMenuBar, et repositionner et/ou redimensionner les autres widgets dans votre fenêtre manuellement, lorsque le GtkMenuBar est masqué.

1
dobey