Как добавить поддержку глобального меню к Python non-gtk, неспокойному приложению?

Я ищу хорошую документацию (пример, учебное руководство или руководство) о том, как добавить поддержку глобального меню non-gtk, неспокойному приложению. (В gtk это работает 'волшебно' на главное меню...). Инструментарий, с которым я хочу использовать это, является kivy, который поддерживает бойкое-mainloop (например, для gstreamer), таким образом, в принципе все должны работать там.

Я видел ссылку API Dbusmenu и здесь, но это не очень полезно для понимания механизмов.

Существует короткий пример для создания средства-запуска-quicklist, которое содержит dbus-меню, но не для глобального меню / appmenu.

Существует страница Wiki, которая не содержит релевантной информации другая затем "Работа над поддержкой другого, меню приложения на других инструментариях приветствовалось бы, но не приоритет для команды DX, требуемая справка".

Существует немного информации в этой диаграмме от исходного кода индикатора-appmenu, но недостаточно, не может быть найден на developer.ubuntu.com и требует большего количества объяснения:

enter image description here

Так:

  • Что является процедурой, которая получает ряд пунктов меню (Dbusmenu. Пункт меню), чтобы быть отображенным?
  • Какая роль делает клиент и игру сервера? (Кто из тех, как предполагается, выполняется в моем приложении? Или оба?)

Подобный вопрос

24
задан 13 April 2017 в 15:25

3 ответа

В общем, я бы рекомендовал использовать поддерживаемые инструментарием способы размещения меню в глобальной строке меню ... но я предполагаю, что уже слишком поздно убеждать вас в этом :-) Также я отмечу, что даже если мы используем Dbusmenu и регистрацию в 12.04, цель состоит в том, чтобы перейти на GM enuModel и пометив окно с его меню до 14.04, чтобы эта информация стала устаревшей. Конечно, плагины набора инструментов будут обновлены ;-) (в последний раз я попробую, обещаю)

Основной принцип заключается в том, что нам нужно знать, какие меню связаны с каким окном. Мы отслеживаем окно, используя его XID, а меню - это путь к серверу Dbusmenu в DBus. Для регистрации вам понадобятся обе эти части информации. Интерфейс регистрации довольно прост в том смысле, что вы в основном передаете обе эти части информации регистратору. Хорошо известное имя регистратора в DBus - com.canonical.AppMenu.Registrar .

Пример того, как это может работать, можно найти в mock-json-пример кода приложения , который находится в indicator-appmenu . Это небольшой инструмент, который берет выходной файл JSON с помощью dbusmenu-dumper (который находится в libdbusmenu-tools ) и создает окно, которое утверждает, что имеет это меню. Он также обрабатывает такие вещи, как сбой в меню приложения, что может не потребоваться для большинства приложений (хотя действительно важно при разработке :-)).

Чтобы создать сервер Dbusmenu , вам просто нужно выделить объект и укажите его место в DBus (чтобы вы могли сообщить местоположение регистратору). Для таких плагинов, как appmenu-gtk , мы используем сгенерированный путь, чтобы не было конфликта, но если вы контролируете приложение, вы, вероятно, можете использовать фиксированный путь. Затем вы создаете древовидную структуру объектов Dbusmenu Menuitem . Корневой не отображается, но передается на сервер Dbusmenu для запуска меню. Первый уровень ниже корня будет показан в виде элементов в меню Ubuntu .

Удачи, спасибо всем людям, которые беспокоили меня, чтобы ответить на этот вопрос. Я по-прежнему считаю, что вам следует использовать поддержку инструментария (я солгал, что это был последний раз), но удачи!

14
ответ дан 13 April 2017 в 15:25

Leider fannt Dir kee frëndlecht Dokument dofir. De globale Menü gouf mat GTK a Qt am Kapp entwéckelt an, wärend et theoretesch méiglech ass Ënnerstëtzung fir aner Webkits ëmzesetzen, well de Protokoll DBus-baséiert ass, war et ganz wéineg Effort fir Dokumentatioun verfügbar ze maachen.

gitt Dir d'Source Coden vun Indikator-Appmenu an Plasma-Widget-Menübar . Dir kënnt déi liesen fir ze verstoen wéi den dbus Protokoll funktionnéiert.

0
ответ дан 13 April 2017 в 15:25

Вы можете использовать привязки python-dbus и использовать API, описанный на http://developer.ubuntu.com/api/ubuntu-12.04/python/Dbusmenu -0.4.html для DbusMenu, для интеграции с панелью глобального меню.

0
ответ дан 13 April 2017 в 15:25

Другие вопросы по тегам:

Похожие вопросы: