You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@@ -422,8 +426,7 @@ iced = { version = "0.14", features = ["tokio", "tiny-skia"] }
422
426
pipewire = "0.8"# pipewire-rs — official PipeWire Rust bindings
423
427
ashpd = { version = "0.13", features = ["global_shortcuts", "tokio"] } # Phase 2
424
428
symphonia = { version = "0.5", features = ["mp3", "ogg", "flac", "wav", "pcm", "aac"] }
425
-
tray-icon = "0.19"# System tray (StatusNotifierItem)
426
-
muda = "0.15"# Menu for tray-icon
429
+
ksni = { version = "0.3", features = ["blocking"] } # System tray SNI over zbus
427
430
thiserror = "2"# Typed error enums at module boundaries
428
431
anyhow = "1"# Error context chains in glue/app layer
429
432
serde = { version = "1", features = ["derive"] }
@@ -530,14 +533,12 @@ This ensures cross-DE compatibility. KDE, GNOME, and Hyprland each implement the
530
533
531
534
### System Tray
532
535
533
-
StatusNotifierItem (SNI) is the standard. Implementation via `tray-icon` crate:
534
-
1.Initialize on main thread before Iced event loop
535
-
2.Menu via `muda` crate: "Show/Hide", separator, "Quit"
536
+
StatusNotifierItem (SNI) is the standard. Implementation via `ksni`:
537
+
1.Start a blocking SNI D-Bus service from the tray module
538
+
2.Provide icon pixmap plus DBusMenu entries: "Show/Hide", separator, "Quit"
536
539
3. Events communicated to Iced via channel → Subscription
537
540
4. No legacy XEmbed tray support
538
541
539
-
**Known warning:**`tray-icon` depends on `libappindicator` which loads `libayatana-appindicator` at runtime. This produces a harmless deprecation warning on stderr: `libayatana-appindicator is deprecated. Please use libayatana-appindicator-glib in newly written code.` This is an upstream issue in the `libappindicator` crate — not actionable from our code. Do not suppress it.
0 commit comments