Новая оболочка в Ubuntu Unity состоит из разных компонентов, взаимодействующих между собой. Данная техническая статья описывает такое понятие как меню сообщений (messaging menu).
Меню сообщений создано, чтобы сделать взаимодействие людей проще. Например, легко сменить статус в программах мгновенных сообщений, не вызывая саму программу. Или предоставить быстрый доступ к предназначенным вам сообщениям, которые вы может ещё не видели. Понятие "предназначенным вам" зависит от приложения. К примеру, почтовые программы часто обладают функционалом, помогающим отличать важные письма от простых. Аналогично поступают IRC клиенты, которые позволяют задавать термины, появление которых в чате, вызывает уведомления для вас.
Автоматически.
Приложение автоматически регистрируется в меню сообщений если:
В файле .desktop приложение может указать действия, которые могут быть вызваны независимо от того запущена ли программа или нет. Синтаксис описан в Ubuntu Wiki ApplicationShortcuts.
Во время запуска.
Для появления приложения в меню сообщений во время запуска нужно использовать libindicate и указать, что ваше приложение для обмена сообщениями.
# импортирование
import indicate
# создание элемента сервера
mm = indicate.indicate_server_ref_default()
# если кто-то щёлкает по нашему элементу в меню сообщений
# то нужно подписаться на получение сигнала
mm.connect("server-display", show_window_function)
# указываем тип сообщений, которые мы используем
mm.set_type("message.im")
# нужно указать .desktop файл, откуда меню получит имя приложения
mm.set_desktop_file("/usr/share/applications/myapp.desktop")
# показываем пункт в меню сообщений.
mm.show()
Во время работы, зарегистрированное приложение может сообщать об одиночном счётчике сообщений или предоставлять раздельные счётчики от разных источников сообщений. Для примера, почтовые папки или RSS ленты могут иметь свои собственные счётчики различных сообщений.
Когда приложение предоставляет раздельные источники сообщений, то каждый источник должен иметь 6 компонент:
# создать элемент источника
mm_source = indicate.Indicator()
# подтипы из вашего приложения
mm_source.set_property("subtype", "im")
# текст который будет показан в меню сообщений
mm_source.set_property("sender", "Unread")
# если будет щелчок по элементу, то будет выслан сигнал user-display
mm_source.connect("user-display", show_window_function)
# уведомляем пользователя о важном событии
mm_source.set_property("draw-attention", "true")
# устанавливаем счётчик в 15
mm_source.set_property("count", "15")
#
# Если вы хотите, то можете установить время time с последнего события
# вместо счётчика count. Но не оба вместе. Вместо количества меню сообщений
# покажет что-то типа "2m" или "1h".
# mm_source.set_property_time("time", time.time())
#
# отображаем пункт
mm_source.show()
Цикл статей об Unity
Unity Ubuntu изнутри. Launcher.
Unity Ubuntu изнутри. Линзы и области.
Unity 6.8.0