Я ищу хорошую документацию (пример, учебное пособие или руководство) о том, как добавить поддержку глобального меню в не-gtk, не-qt-приложения. (В gtk это работает «магически» для главного меню ...). Набор инструментов, с которым я хочу использовать это kivy , который поддерживает glib-mainloop (например, для gstreamer), поэтому в принципе все должно работать там.
Я видел ссылку на API в Dbusmenu и здесь , но это не очень полезно для понимания механизмов.
Есть короткий пример создания списка быстрого запуска, который содержит dbus-меню, но не для global-menu / appmenu.
Существует вики-страница , которая не содержит какой-либо соответствующей информации, кроме «Хотелось бы приветствовать работу по поддержке других меню приложения в других наборах инструментов, но это не является приоритетом для команды DX, нужна помощь».
На этом рисунке немного информации из исходного кода индикатора-приложения, но ее недостаточно, ее нельзя найти на developer.ubuntu.com, и она требует дополнительных пояснений:
Так:
- Какова процедура, которая получает набор пунктов меню (Dbusmenu.Menuitem) для отображения?
- Какую роль играет клиент и сервер? (Какой из них должен быть запущен в моем приложении? Или оба?)
источник
Ответы:
В общем, я бы рекомендовал использовать поддерживаемые инструментарием способы размещения меню в глобальной строке меню ... но, я полагаю, уже слишком поздно, чтобы убедить вас в этом :-) Кроме того, я отмечу, что даже мы думали, что мы При использовании Dbusmenu и регистрации в 12.04 цель состоит в том, чтобы перейти к GMenuModel и пометить окно с его меню к 14.04, так что эта информация станет устаревшей. Конечно, плагины инструментария будут обновлены ;-) (последний раз попробую, обещаю)
Основной принцип заключается в том, что нам нужно знать, какие меню связаны с каким окном. Мы отслеживаем окно, используя его XID, и меню - это путь к Серверу Dbusmenu на DBus. Вам понадобится обе эти части информации для регистрации. Интерфейс регистрации довольно прост в том, что вы передаете обе эти информации регистратору. Хорошо известное имя регистратора в DBus - com.canonical.AppMenu.Registrar .
В качестве примера того, как это может работать, вы можете взглянуть на пример кода mock-json-app, который находится в Indicator-Appmenu . Это небольшой инструмент, который принимает вывод файла JSON с помощью dbusmenu-dumper (который находится в libdbusmenu-tools ) и создает окно, которое утверждает, что имеет это меню. Он также обрабатывает такие вещи, как аварийное завершение работы приложения, которые могут не требоваться для большинства приложений (хотя это действительно важно при разработке :-)).
Чтобы создать сервер Dbusmenu, вам просто нужно выделить объект и указать, где он должен находиться в DBus (чтобы вы могли указать местоположение регистратору). Для таких плагинов, как appmenu-gtk, мы используем сгенерированный путь, чтобы не было конфликтов, но если вы управляете приложением, вы, вероятно, можете использовать фиксированный путь. Затем вы создаете древовидную структуру объектов Dbusmenu Menuitem . Корневой не отображается, но передается на сервер Dbusmenu для запуска меню. Первый уровень ниже корня будет показан в виде предметов через Ubuntu Menubar .
Удачи, спасибо всем людям, которые преследовали меня, чтобы ответить на этот вопрос. Я все еще верю, что вы должны использовать поддержку инструментария (я солгал об этом в последний раз), но удачи!
источник
К сожалению, вы не найдете дружественный документ для этого. Глобальное меню было разработано с учетом GTK и Qt, и, хотя теоретически возможно реализовать поддержку других веб-наборов, поскольку протокол основан на DBus, было очень мало усилий для обеспечения доступности документации.
Лучшие указатели, которые я могу вам дать - это исходные коды индикатора-приложения и плазмы-виджета-меню . Вы можете прочитать их, чтобы понять, как работает протокол dbus.
источник
Вы можете использовать привязки python-dbus и использовать API, описанный по адресу http://developer.ubuntu.com/api/ubuntu-12.04/python/Dbusmenu-0.4.html для DbusMenu, для интеграции с глобальной панелью меню.
источник