fix(desktop): use same connection for sending/recieving notifications (#3505)

This commit is contained in:
Nanakusa authored and GitHub committed 2026-10-16 14:41:45 +02:00
1 parent 275cc73f7a
commit 9e15194d6f
1 file changed
+9 -4
@@ -266,8 +266,12 @@ impl FreedesktopNotifications {
let method_conn = open_blocking_connection()
.map_err(|err| generic_error(format!("notifications client init failed: {err}")))?;
let stop_signal_thread = Arc::new(AtomicBool::new(false));
let signal_thread = spawn_signal_thread(event_callback.clone(), stop_signal_thread.clone())
.map_err(|err| generic_error(format!("notifications client init failed: {err}")))?;
let signal_thread = spawn_signal_thread(
event_callback.clone(),
method_conn.clone(),
stop_signal_thread.clone(),
)
.map_err(|err| generic_error(format!("notifications client init failed: {err}")))?;
Ok(Self {
inner: Arc::new(Inner {
@@ -536,6 +540,7 @@ fn build_hints(hints: &NotifyHints) -> HashMap<&'static str, Value<'_>> {
fn spawn_signal_thread(
event_callback: EventThreadsafeFunction,
method_conn: BlockingConnection,
stop: Arc<AtomicBool>,
) -> std::result::Result<JoinHandle<()>, String> {
let (ready_tx, ready_rx) = mpsc::sync_channel(1);
@@ -544,13 +549,13 @@ fn spawn_signal_thread(
.name("fluxer-linux-notifications-signals".to_string())
.spawn(move || {
let setup = future::block_on(async {
let conn = zbus::Connection::session().await?;
let conn = method_conn.inner();
let rule = MatchRule::builder()
.msg_type(MessageType::Signal)
.path(NOTIFY_PATH)?
.interface(NOTIFY_IFACE)?
.build();
let stream = MessageStream::for_match_rule(rule, &conn, Some(64)).await?;
let stream = MessageStream::for_match_rule(rule, conn, Some(64)).await?;
zbus::Result::Ok((conn, stream))
});