Szukam dobrej dokumentacji (przykład, samouczek lub przewodnik) na temat dodawania obsługi menu globalnego do aplikacji innej niż gtk i innej niż qt. (W gtk działa „magicznie” dla menu głównego ...). Zestaw narzędzi, z którym chcę tego używać, to kivy , który obsługuje glib-mainloop (np. Dla gstreamer), więc w zasadzie wszystko powinno tam działać.
Widziałem odniesienie API Dbusmenu i tutaj , ale to nie jest bardzo pomocne dla zrozumienia mechanizmów.
Istnieje krótki przykład tworzenia szybkiej listy programu uruchamiającego, która zawiera menu dbus, ale nie dla menu globalnego / menu aplikacji.
Istnieje strona wiki , która nie zawiera żadnych istotnych informacji innych niż „Praca nad obsługą innych menu aplikacji na innych zestawach narzędzi byłaby mile widziana, ale nie jest priorytetem dla zespołu DX, potrzebna pomoc”.
Na tej grafice znajduje się trochę informacji z kodu źródłowego wskaźnika-menu aplikacji, ale to za mało, nie można znaleźć na developer.ubuntu.com i wymaga dodatkowych wyjaśnień:
Więc:
- Jaka jest procedura wyświetlania zestawu pozycji menu (Dbusmenu.Menuitem)?
- Jaką rolę odgrywa klient i serwer? (Który z nich powinien być uruchamiany w mojej aplikacji? Lub obu?)
źródło
Odpowiedzi:
Ogólnie polecam korzystanie z obsługiwanych przez zestaw narzędzi sposobów umieszczania menu w globalnym pasku menu ... ale zakładam, że jest już za późno, aby cię przekonać :-) Ponadto zauważę, że nawet myślałem, że 'używam Dbusmenu i rejestracji w 12.04 celem jest przejście do GMenuModel i oznaczenie okna z menu do 14.04, więc ta informacja zostanie opatrzona datą. Oczywiście wtyczki zestawu narzędzi zostaną zaktualizowane ;-) (ostatni raz spróbuję, obiecuję)
Podstawową zasadą jest to, że musimy wiedzieć, jakie menu są powiązane z którym oknem. Śledzimy okno za pomocą jego XID, a menu są ścieżką do serwera Dbusmenu na DBus. Będziesz potrzebował obu tych informacji, aby się zarejestrować. Interfejs rejestracji jest dość prosty, ponieważ zasadniczo przekazujesz oba te informacje do rejestratora. Znaną nazwą rejestratora w DBus jest com.canonical.AppMenu.Registrar .
Na przykład, jak to może działać, możesz spojrzeć na przykładowy kod mock-json-app, który znajduje się w menu wskaźnikowym . Jest to małe narzędzie, które pobierze dane wyjściowe pliku JSON przez dbusmenu-dumper (który znajduje się w libdbusmenu-tools ) i utworzy okno, które twierdzi, że ma to menu. Obsługuje także takie awarie menu aplikacji, które mogą nie być tak naprawdę wymagane w większości aplikacji (choć jest to bardzo ważne w rozwoju :-)).
Aby utworzyć serwer Dbusmenu , wystarczy po prostu przydzielić obiekt i powiedzieć mu, gdzie ma się pojawić na DBusie (abyś mógł podać lokalizację rejestratorowi). W przypadku wtyczek takich jak appmenu-gtk używamy wygenerowanej ścieżki, aby nie było konfliktu, ale jeśli kontrolujesz aplikację, prawdopodobnie możesz użyć stałej ścieżki. Następnie tworzysz strukturę drzewa obiektów Dbusmenu Menuitem . Główny nie jest pokazany, ale jest przekazywany do serwera Dbusmenu w celu uruchomienia menu. Pierwszy poziom poniżej katalogu głównego będzie wyświetlany jako elementy w menu Ubuntu Menubar .
Powodzenia dzięki wszystkim osobom, które mnie nękały, aby odpowiedzieć na to pytanie. Nadal uważam, że powinieneś skorzystać ze wsparcia zestawu narzędzi (kłamałem, że to ostatni raz), ale powodzenia!
źródło
Niestety nie znajdziesz na to przyjaznego dokumentu. Menu globalne zostało opracowane z myślą o GTK i Qt i chociaż teoretycznie możliwe jest wdrożenie obsługi innych zestawów internetowych, ponieważ protokół jest oparty na DBus, udostępnienie dokumentacji było bardzo niewielkie.
Najlepsze wskaźniki, jakie mogę ci podać, to kody źródłowe wskaźnika-menu i paska narzędzi widgetu plazmy . Możesz je przeczytać, aby zrozumieć, jak działa protokół dbus.
źródło
Można użyć powiązań python-dbus i interfejsu API udokumentowanego na stronie http://developer.ubuntu.com/api/ubuntu-12.04/python/Dbusmenu-0.4.html dla DbusMenu w celu integracji z globalnym paskiem menu.
źródło