Je recherche une bonne documentation (un exemple, un tutoriel ou un guide) sur la façon d'ajouter la prise en charge du menu global à une application non gtk, non qt. (Dans gtk cela fonctionne 'par magie' pour le menu principal ...). La boîte à outils avec laquelle je veux l'utiliser est kivy , qui prend en charge le glib-mainloop (par exemple pour gstreamer), donc en principe tout devrait y fonctionner.
J'ai vu la référence API de Dbusmenu et ici , mais ce n'est pas très utile pour comprendre les mécanismes.
Il y a un court exemple pour créer une liste de lancement rapide qui contient un menu dbus, mais pas pour le menu global / appmenu.
Il y a une page wiki qui ne contient aucune information pertinente autre que "Travailler sur la prise en charge des autres le menu de l'application sur d'autres boîtes à outils serait le bienvenu, mais pas une priorité pour l'équipe DX, aide souhaitée."
Il y a un peu d'informations dans ce graphique du code source de l'indicateur-appmenu, mais ce n'est pas suffisant, ne peut pas être trouvé sur developer.ubuntu.com et nécessite plus d'explications:
Alors:
- Quelle est la procédure qui permet d'afficher un ensemble d'éléments de menu (Dbusmenu.Menuitem)?
- Quel rôle jouent le client et le serveur? (Lequel est censé être exécuté dans mon application? Ou les deux?)
la source
Réponses:
En général, je recommanderais d'utiliser les méthodes prises en charge par la boîte à outils pour mettre les menus dans la barre de menu globale ... mais, je suppose qu'il est trop tard pour vous convaincre à ce stade :-) De plus, je noterai que même si nous pensions Nous utilisons Dbusmenu et l'inscription en 12.04, l'objectif est de passer à GMenuModel et de marquer la fenêtre avec ses menus d'ici le 14.04, de sorte que ces informations deviendront obsolètes. Bien sûr, les plug-ins de la boîte à outils seront mis à jour ;-) (la dernière fois que j'essaierai, je le promets)
Le principe de base impliqué est que nous devons savoir quels menus sont associés à quelle fenêtre. Nous suivons la fenêtre à l'aide de son XID et les menus sont un chemin vers le 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 essentiellement ces deux informations au registraire. 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 consulter l' exemple de code mock-json-app qui se trouve dans le menu indicateur-app . Il s'agit d'un petit outil qui prendra la sortie du fichier JSON par dbusmenu-dumper (qui est dans libdbusmenu-tools ) et fera une fenêtre qui prétend avoir ce menu. Il gère également des choses comme le crash du menu d'application, qui pourrait ne pas être vraiment nécessaire pour la plupart des applications (bien que ce soit vraiment important dans le développement :-)).
Pour créer un serveur Dbusmenu, il vous suffit simplement d'allouer l'objet et de lui indiquer où apparaître sur DBus (afin de pouvoir donner l'emplacement au registraire). Pour les plugins comme appmenu-gtk, nous utilisons un chemin généré afin qu'il n'y ait pas de conflit, mais si vous contrôlez l'application, vous pouvez probablement utiliser un chemin fixe. Vous créez ensuite une arborescence d' objets Dbusmenu Menuitem . Celui racine n'est pas affiché, mais est transmis au serveur Dbusmenu pour démarrer les menus. Le premier niveau en dessous de la racine sera affiché comme des éléments dans la barre de menus d'Ubuntu .
Bonne chance, merci à toutes les personnes qui m'ont harcelé pour répondre à cette question. Je crois toujours que vous devriez utiliser le support de la boîte à outils (j'ai menti à propos de la dernière fois), mais bonne chance!
la source
Malheureusement, vous ne trouverez pas de document convivial pour cela. Le menu global a été développé avec GTK et Qt à l'esprit et, bien qu'il soit théoriquement possible d'implémenter la prise en charge d'autres webkits puisque le protocole est basé sur DBus, il y a eu très peu d'efforts pour rendre la documentation disponible.
Les meilleurs pointeurs que je peux vous donner sont les codes source de indicateur-menu et du plasma-widget-menubar . Vous pouvez les lire pour comprendre comment fonctionne le protocole dbus.
la source
Vous pouvez utiliser des liaisons python-dbus et utiliser l'API documentée à http://developer.ubuntu.com/api/ubuntu-12.04/python/Dbusmenu-0.4.html pour DbusMenu, pour intégrer la barre de menus globale.
la source