Как сделать иконку в трее?

Разработка на C# под linux
 
https://www.linux.org.ru/forum/talks/9556461
https://github.com/picoe/Eto/issues/291

Надо бы поразбираться, как работает GtkStatusIcon
https://developer.gnome.org/gtk3/stable/GtkStatusIcon.html
И как использовать StatusNotifierItem (SNI, org.freedesktop.StatusNotifierItem)

Ещё хорошо бы посмотреть исходники Workrave application
https://github.com/rcaelers/workrave/tree/7cb9aef971f21c9a473146f9b72693b86a4a76f6/frontend/applets are
"cinnamon", "common", "gnome-shell", "gnome2", "gnome3", "indicator", "mate", "win32", "xfce"

И потом, ну почему сразу в трее? может можно приложение "Window List", которое показывает минимизированные окна, научить показывать прогресс-бары?
Или сделать отдельный апплет, а к нему сделать отдельную панель внизу.
или вообще сделать эту панель вертикальной.
Весь смысл панели, получается, заключается в том, что она фиксирована по отношению к другим окнам (Dock и Fill свойства), а так она такое же окно, в котором можно организовывать интерфейс.
Ну возьми DockPanelSuite и сделай из него WindowManager на C#...

Если тебе так хочется доделать иконку в трее,
то тебе надо разобраться, как работает StatusNotifierItem (SNI, org.freedesktop.StatusNotifierItem)
это означает:
- прочитать спецификацию на него, понять все слова
- прочитать спецификацию на DBus
- научиться использовать библиотеку C# для DBus
- разобраться как сделан существующий C-код для работы с DBus (например в WorkRave)
- сделать правильную реализацию хоть как-нибудь
- сделать реализацию для System.Windows.Forms.NotifyIcon (от этого профиксится бага в программе KeePass)
--- как подзадача там будет - определять, что использовать XEmbed или DBus
   (это зависит от того, какое DE используется и какие программы запущены)
   как узнать, присутствует ли DBus вообще в системе в запущенном виде?
   как узнать, запущено ли приложение, обрабатывающее StatusNotifierItem?
   если нет, то запущен ли XEmbed (как fallback)
   если нет, то как отложить задачу до ожидания его запуска