Интеграция своих приложений с Unity Launcher

Приветствую всех!

Уже достаточно давно появилась разработка небезызвестной компании Canonical — Unity. Вызвала она крайне неоднозначные эмоции у всех пользователей. Но разработчики ПО нашли ее интересной и стараются интегрировать свои приложения в Unity, а Unity в свои приложения. Не будем же отставать и мы. 
Я хотел бы поговорить с вами об одной из интереснейших возможностей Unity — Unity Launcher. Эта панель, которую мы можем наблюдать в левой части экрана. Но панель это не простая, мы можем интегрировать в нее приложения, а именно можем выводить следующую информацию: шкалу, отображающую какой-либо процесс, количество чего-либо и можем привлекать внимание пользователей.
Я постараюсь подробно описать API и показать примеры на C/C++ и Python.

Приступим к делу.
Для начала создаем нашу экспериментальную площадку. Для этого сначала создаем файл UnityTest.cpp, в котором будет наш исходный код.
Теперь установим необходимый пакет — libunity-dev (sudo apt-get install libunity-dev).
Можно приступать к разработке.
За иконку в Unity Launcher отвечает тип данных UnityLauncherEntry. Увы, насколько мне известно, нету метода, с помощь которого можно было бы получить текущую иконку в Launcher. Иконка получается по названию файла запуска. Для меня это показалось несколько необычным, непривычным, но позже я понял, что ничего сверхъестественного в этом нет. Основной метод для получения иконки:

Где desktop_id — название файла запуска.

Примечание:
Опытным путем было установлено, что если иконки текущего приложения нету, не существует, то при запуске приложения она будет временно создана с именем: «Имя_приложения.desktop» (если ошибаюсь, то прошу поправить). Я советую самому создавать данную кнопку запуска, причем давать имя файлу по правилу, описанному ранее («Имя_приложения.desktop»).

Следующие методы нужны для работы с шкалой, которая будет отображена поверх иконки в Launcher:

Где self — ранее полученная иконка.
В первом методе value может принимать значение от 0 до 1, которое показывает количество процентов на шкале.
Во втором методе value может принимать значения true и false, которые показывают, отображена ли сейчас шкала.
Третий и четвертый методы действуют обратно первому и второму, то есть получают значения.

Следующие методы нужны для работы с количеством чего-либо на нашей иконке:

Где self — ранее полученная иконка.
В первом методе value может принимать любое численное значение, которое будет отображено поверх иконки.
Второй метод действует обратно первому.
Третий и четвертый методы работают сходно аналогичным методам для работы со шкалой.

Следующие два метода служат для привлечения внимания пользователя:

Где self — ранее полученная иконка.
value — статус приложения. True — активный режим для назойливого привлечения внимания пользователя, False — обычный режим.

Два последних метода служат для подключения своего меню к иконке:

А теперь пример с подробными комментариями, который нужно скопировать в файл UnityTest.cpp:

Собрать можно следующей командой:
g++ pkg-config unity gtk+-2.0 dbusmenu-glib-0.4 --cflags --libs UnityTest.cpp -o UnityTest

Также имеется возможность использовать интеграцию с Unity Launcher в Python-приложениях. Вот небольшой пример, который добавляет несколько пунктов меню в иконку Chromium:

Пробуем, адаптируем, развиваем!

Источник: habrahabr.ru.

У вас болят зубы? Или вообще выпадывают? Сожалею, но тогда вам срочно нужна Имплантация зубов. Эти и другие услуги есть на сайте implantolog.net.