web-dev-qa-db-fra.com

Comment ajouter la prise en charge du menu global à une application python non-gtk, non-qt?

Je recherche une bonne documentation (un exemple, un tutoriel ou un guide) sur la façon d'ajouter un support de menu global à une application non gtk, ni qt. (En gtk cela fonctionne "comme par magie" pour le menu principal ...). La boîte à outils avec laquelle je veux utiliser ceci est kivy , qui supporte le glib-mainloop (par exemple, pour gstreamer), donc, en principe, tout devrait fonctionner ici.

J'ai vu la référence API de Dbusmen et ici , mais ce n'est pas très utile pour comprendre les mécanismes.

Il existe un court exemple pour créer un launcher-quicklist qui contient un menu-menu, mais pas pour le menu global/menu-app.

Il existe une page wiki qui ne contient aucune information pertinente autre que "Travailler sur le support des autres menus d'applications sur d'autres trousses à outils serait la bienvenue, mais pas une priorité pour l'équipe DX, l'aide demandée".

Il y a quelques informations dans ce graphique provenant du code source indicator-appmenu, mais cela ne suffit pas, elles ne peuvent pas être trouvées sur developer.ubuntu.com et nécessitent plus d'explications:

enter image description here

Alors:

  • Quelle est la procédure à suivre pour obtenir un ensemble d’éléments de menu (Dbusmenu.Menuitem)?
  • Quel rôle le client et le serveur jouent-ils? (Lequel de ceux-ci est censé être exécuté dans mon application? Ou les deux?)

Question similaire

24
xubuntix

En général, je vous recommanderais d'utiliser les moyens pris en charge par la boîte à outils pour mettre les menus dans la barre de menus globale ... mais, je suppose qu'il est trop tard pour vous convaincre :-) Si vous utilisez Dbusmenu et que vous vous enregistrez dans 12.04, l’objectif est de passer à GMenuModel et de marquer la fenêtre avec ses menus avant le 14.04, afin que ces informations deviennent obsolètes. Bien sûr, les plug-ins de la boîte à outils seront mis à jour ;-) (la dernière fois que je vais essayer, je vous le promets)

Le principe de base est que nous devons savoir quels menus sont associés à quelle fenêtre. Nous suivons la fenêtre en utilisant son XID et les menus sont un chemin d'accès au serveur Dbusmenu sur DBus. Vous aurez besoin de ces deux informations pour vous inscrire. L’interface d’enregistrement est assez simple en ce sens que vous transmettez ces deux informations au bureau d’enregistrement. Le nom bien connu du registraire sur DBus est com.canonical.AppMenu.Registrar .

Pour un exemple de la façon dont cela peut fonctionner, vous pouvez regarder le exemple de code simulé-json-app qui se trouve dans indicateur-appmen . C'est un petit outil qui récupérera le fichier JSON généré par dbusmenu-dumper (qui est dans libdbusmenu-tools ) et créera une fenêtre prétendant avoir ce menu. Il gère également des choses comme le plantage de l'appmenu, qui peut ne pas être vraiment nécessaire pour la plupart des applications (bien que ce soit vraiment important en développement :-)).

Pour créer un Dbusmenu Server , il vous suffit simplement d’attribuer l’objet et de lui indiquer le lieu d’apparition sur DBus (pour que vous puissiez indiquer l’emplacement au bureau d’enregistrement). Pour les plugins tels que appmenu-gtk , nous utilisons un chemin généré pour qu'il n'y ait pas de conflit, mais si vous contrôlez l'application, vous pouvez probablement utiliser un chemin fixe. Ensuite, vous créez une arborescence d'objets Dbusmenu Menuitem . La racine n'est pas affichée, mais est transmise au serveur Dbusmen pour démarrer les menus. Le premier niveau ci-dessous, la racine sera affiché en tant qu'éléments sur buntu Menubar .

Bonne chance, merci à toutes les personnes qui m'ont harcelé de répondre à cette question. Je crois toujours que vous devriez utiliser le support de la boîte à outils (j'ai menti que c'était la dernière fois), mais bonne chance!

14
Ted Gould

Vous pouvez utiliser des liaisons python-dbus et utiliser l'API documentée à l'adresse http://developer.ubuntu.com/api/ubuntu-12.04/python/Dbusmenu-0.4.html pour DbusMenu, à intégrer à la barre de menu globale.

0
dobey

Malheureusement, vous ne trouverez pas de document amical pour cela. Le menu global a été développé avec GTK et Qt à l’esprit et, bien qu’il soit théoriquement possible de prendre en charge d’autres kits Web puisque le protocole est basé sur DBus, très peu d’efforts ont été déployés pour rendre la documentation disponible.

Les meilleurs indicateurs que je puisse vous donner sont les codes sources de indicateur-appmen et plasma-widget-menubar . Vous pouvez les lire pour comprendre le fonctionnement du protocole dbus.

0
Marcelo Hashimoto