Rootdiv, А я уже и позабыл как там в Python версии
Но вы правы - стоит привести к общему виду (в виду моего грандиозного плана).
Пользователь добавил сообщение 30 Мая 2022, 15:11:19:
Rootdiv, сегодня погонял yd-go в виртуалке на Ubuntu Mate 22.04 с терейсингом обмена по D-BUS.
Сложилась вот какая картина (если при чтении становится понятно что ничего не понятно - пропускаем все до черты):
Серверная часть org.kde.StatusNotifierWatcher (отвечает за прорисовку иконки индикатора и меню, именно к этом сервису подключаются индикаторы приложений и в частности yd-go) обслуживается библиотекой /usr/lib/ayatana-indicator-application/ayatana-indicator-application-service.
Обмен по d-bus показывает следующий порядок взаимодействия (в процессе остановки сервиса yandsex-disk меняется один раз иконка Idle->off-line и меняется меню):
1. yd-go сообщает org.kde.StatusNotifierWatcher что изменились свойство IconPixmap и в этом же сообщении отправляет новое значение (бинарное представление иконки)
2. org.kde.StatusNotifierWatcher запрашивает yd-go все свойства интерфейса org.kde.StatusNotifierItem и yd-go отдает все свойства этого интерфейса включая свойство IconPixmap.
Т.е. на этом этапе org.kde.StatusNotifierWatcher дважды получает новую иконку в бинарном представлении.
Но вот дальше странное....
org.kde.StatusNotifierWatcher начинает слать сообщения об обновлении индикатора в трее другому серверу D-BUS: org.ayatana.indicator.application.service (который внезапно хостится все тем же бинариком /usr/lib/ayatana-indicator-application/ayatana-indicator-application-service, т.е. шлем сами себе

)
И вот в сообщении ApplicationIconCanged оправляются просто две пустые строчки

никаких бинарных данных нет. Могу только предположить, что на самом деле отправляются просто поля типа IconName/IconThemePath - т.е. те поля которые в рамках yd-go/systray просто не используются.
_________________
Я понимаю что текст выше может быть непонятен большей половине посетителей этого форума поэтому просто краткое резюме:
В Ubuntu Mate 22.04 иконка yd-go не показывается потому, что плагин панели индикаторов не поддерживает получение иконки от приложения в бинарном формате. К сожалению со стороны yd-go эту проблему не пофиксить (собственно yd-go отдает плагину все что нужно).
Я попробую найти разработчиков этого самого плагина и зарепортить им эту проблему (если она еще не висит у них в репортах).
Пользователь добавил сообщение 30 Мая 2022, 16:13:03:
Ну. все верно - ayatana-indicator-application тупо не поддерживает свойство IconPixmap - у них только IconName и IconDesc.
Что несколько нарушает
пусть и драфт, но уже дефакто стандарт.
На эту тему нашлось у них на github ишью, приписал свой вопрос (планируют ли добавить поддержку IconPixmap) приписал в
него.
Пользователь добавил сообщение 31 Мая 2022, 01:44:03:
Собрал новую
сборку.
Поправил CI скрипт, что бы использовался простой формат версии (как тег релиза: <бранч>-<хеш коммита>), а то раньше там довольно странной была версия с двумя хешами.
Версию можно посмотреть теперь не только через меню -> About, но и в командной строке: yd-go -h покажет версию в том самом правильном формате.
Поправил меню (правда это немного ломает переводы на русский) - до переводов пока руки не дошли.
Сделал (на уровне библиотеки systray) ограничение на частоту обновления меню - теперь обновляется не чаще чем 10 раз в секунду. Должно меньше глючить в процессе обновления.
Нашел и поправил пару мест где были гонки данных (data races) - там не так криминально, что бы приложение из-за этого падало, но где это может вылезти - никогда не знаешь - лучше их убрать, тем более, что в go очень неплохие средства для отлова таких ситуаций.