fix(dbus): stop forcing the zbus 5 executor onto tokio

zbus features unify across the dependency graph and "tokio" wins over
"async-io": enabling it via rfd, ashpd (secret portal) and ksni's
default features flipped the shared zbus 5 executor to tokio for
accesskit_unix/atspi too — Slint's accessibility backend opens its
D-Bus connection on a plain thread and panicked at startup ("there is
no reactor running, must be called from the context of a Tokio 1.x
runtime"), killing AT-SPI support. Switch every zbus-5 consumer we
control to the async-io backend (rfd "async-std", ashpd "async-io",
ksni default-features off + "async-io"): async-io connections
self-drive from any thread and the futures still await fine inside our
tokio runtime. The zbus 4 group (keyring/secret-service/mpris-server/
qbz-audio) is a separate feature graph and stays on tokio by design.

cc
This commit is contained in:
vicrodh committed 2026-07-05 10:26:18 -06:00
1 parent c482ca0c0b
commit 6c9964481a
4 files changed
+41 -10

No files matched your search

+7 -3
View File
@@ -30,10 +30,14 @@ urlencoding = "2"
[target.'cfg(target_os = "linux")'.dependencies]
mpris-server = "0.8"
async-channel = "2"
# XDG notification portal (goes over D-Bus). Same crate + tokio runtime the
# secret portal already pulls in (qbz-credentials uses ashpd 0.13/tokio).
# XDG notification portal (goes over D-Bus). async-io, NOT tokio: zbus 5's
# "tokio" feature unifies graph-wide and its executor then requires a tokio
# reactor on EVERY thread that opens a zbus connection — accesskit_unix/atspi
# (Slint accessibility) and ksni run theirs on plain threads and panicked at
# startup ("there is no reactor running"). async-io futures still await fine
# inside our tokio runtime. Keep in sync with qbz-credentials/Cargo.toml.
ashpd = { version = "0.13", default-features = false, features = [
"tokio",
"async-io",
"notification",
] }