Ich suche eine gute Dokumentation (ein Beispiel, ein Tutorial oder eine Anleitung) zum Hinzufügen globaler Menüunterstützung zu einer Nicht-Gtk-, Nicht-Qt-Anwendung. (In gtk funktioniert es 'magisch' für das Hauptmenü ...). Das Toolkit, mit dem ich dies verwenden möchte, ist kivy , das den glib-mainloop unterstützt (z. B. für gstreamer), daher sollten im Prinzip alle dort funktionieren.
Ich habe die API-Referenz von Dbusmenu und hier gesehen , aber das ist nicht sehr hilfreich für das Verständnis der Mechanismen.
Es gibt ein kurzes Beispiel für die Erstellung einer Launcher-Quicklist, die ein dbus-Menü enthält, jedoch nicht für das globale Menü / App-Menü.
Es gibt eine Wiki-Seite , die keine anderen relevanten Informationen enthält als "Arbeiten an der Unterstützung des Anwendungsmenüs auf anderen Toolkits wäre willkommen, aber keine Priorität für das DX-Team, um Hilfe zu bitten."
Diese Grafik enthält einige Informationen aus dem Quellcode des Indikator-Appmenüs, die jedoch nicht ausreichen. Sie können nicht auf developer.ubuntu.com gefunden werden und erfordern weitere Erläuterungen:
So:
- Wie wird vorgegangen, um eine Reihe von Menüelementen (Dbusmenu.Menuitem) anzuzeigen?
- Welche Rolle spielen Client und Server? (Welche davon soll in meiner Anwendung ausgeführt werden? Oder beides?)
quelle
Antworten:
Im Allgemeinen würde ich empfehlen, das Toolkit zu verwenden, um Menüs in die globale Menüleiste einzufügen ... aber ich gehe davon aus, dass es zu spät ist, Sie an dieser Stelle zu überzeugen :-) Außerdem stelle ich fest, dass wir das selbst gedacht haben Verwenden Sie Dbusmenu und registrieren Sie sich in 12.04. Das Ziel ist, zu GMenuModel zu wechseln und das Fenster mit seinen Menüs bis 14.04. zu markieren, damit diese Informationen datiert werden. Natürlich werden die Toolkit-Plugins aktualisiert ;-) (Ich verspreche es beim letzten Mal)
Das Grundprinzip ist, dass wir wissen müssen, welche Menüs mit welchem Fenster verknüpft sind. Wir verfolgen das Fenster anhand seiner XID und die Menüs sind ein Pfad zum Dbusmenu-Server auf DBus. Sie benötigen beide Informationen, um sich zu registrieren. Die Registrierungsschnittstelle ist ziemlich einfach , da Sie im Grunde beide Informationen an den Registrar übergeben. Der bekannte Name des Registrars auf DBus ist com.canonical.AppMenu.Registrar .
Ein Beispiel dafür finden Sie im Beispielcode für mock-json-app , der sich im Menü indicator-app befindet . Dies ist ein kleines Tool, das die von dbusmenu-dumper (in libdbusmenu-tools ) ausgegebene JSON-Datei verwendet und ein Fenster erstellt, das behauptet, dieses Menü zu haben. Es behandelt auch Dinge wie das Abstürzen des App-Menüs, das für die meisten Anwendungen möglicherweise nicht wirklich erforderlich ist (obwohl dies für die Entwicklung wirklich wichtig ist :-)).
Um einen Dbusmenu-Server zu erstellen, müssen Sie das Objekt lediglich zuweisen und ihm mitteilen, wo es auf dem DBus erscheinen soll (damit Sie dem Registrar den Speicherort mitteilen können). Für Plugins wie appmenu-gtk verwenden wir einen generierten Pfad, damit es keinen Konflikt gibt. Wenn Sie die App steuern, können Sie wahrscheinlich einen festen Pfad verwenden. Anschließend erstellen Sie eine Baumstruktur von Dbusmenu Menuitem- Objekten. Das Root- Menü wird nicht angezeigt, sondern an den Dbus-Menü-Server übergeben , um die Menüs zu starten. Die erste Ebene unter dem Stammverzeichnis wird in der Ubuntu-Menüleiste als Elemente angezeigt .
Viel Glück, vielen Dank an alle, die mich belästigt haben, um diese Frage zu beantworten. Ich glaube immer noch, dass Sie die Toolkit-Unterstützung verwenden sollten (ich habe das letzte Mal gelogen), aber viel Glück!
quelle
Leider finden Sie dafür kein freundliches Dokument. Das globale Menü wurde unter Berücksichtigung von GTK und Qt entwickelt, und obwohl es theoretisch möglich ist, Unterstützung für andere Webkits zu implementieren, da das Protokoll auf DBus basiert, war die Bereitstellung von Dokumentation nur sehr wenig aufwendig.
Die besten Hinweise, die ich Ihnen geben kann, sind die Quellcodes des Indikator-Appmenüs und der Plasma-Widget-Menüleiste . Sie können diese lesen, um zu verstehen, wie das dbus-Protokoll funktioniert.
quelle
Sie können Python-Dbus-Bindungen verwenden und die API verwenden, die unter http://developer.ubuntu.com/api/ubuntu-12.04/python/Dbusmenu-0.4.html für DbusMenu dokumentiert ist, um sie in die globale Menüleiste zu integrieren.
quelle