diff --git a/Cargo.lock b/Cargo.lock index 3231ffe6..2445aab3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1516,7 +1516,7 @@ dependencies = [ [[package]] name = "cosmic-config" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#421552dea1c06e876d5999333794b9ee918340a1" +source = "git+https://github.com/pop-os/libcosmic#f6039597b72d3eefe2ee1d6528a04077982db238" dependencies = [ "atomicwrites", "cosmic-config-derive", @@ -1537,7 +1537,7 @@ dependencies = [ [[package]] name = "cosmic-config-derive" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#421552dea1c06e876d5999333794b9ee918340a1" +source = "git+https://github.com/pop-os/libcosmic#f6039597b72d3eefe2ee1d6528a04077982db238" dependencies = [ "quote", "syn 2.0.111", @@ -1802,7 +1802,7 @@ dependencies = [ [[package]] name = "cosmic-theme" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#421552dea1c06e876d5999333794b9ee918340a1" +source = "git+https://github.com/pop-os/libcosmic#f6039597b72d3eefe2ee1d6528a04077982db238" dependencies = [ "almost", "cosmic-config", @@ -3169,7 +3169,7 @@ dependencies = [ [[package]] name = "iced" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#421552dea1c06e876d5999333794b9ee918340a1" +source = "git+https://github.com/pop-os/libcosmic#f6039597b72d3eefe2ee1d6528a04077982db238" dependencies = [ "dnd", "iced_accessibility", @@ -3187,7 +3187,7 @@ dependencies = [ [[package]] name = "iced_accessibility" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#421552dea1c06e876d5999333794b9ee918340a1" +source = "git+https://github.com/pop-os/libcosmic#f6039597b72d3eefe2ee1d6528a04077982db238" dependencies = [ "accesskit", "accesskit_winit", @@ -3196,7 +3196,7 @@ dependencies = [ [[package]] name = "iced_core" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#421552dea1c06e876d5999333794b9ee918340a1" +source = "git+https://github.com/pop-os/libcosmic#f6039597b72d3eefe2ee1d6528a04077982db238" dependencies = [ "bitflags 2.10.0", "bytes", @@ -3220,7 +3220,7 @@ dependencies = [ [[package]] name = "iced_futures" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#421552dea1c06e876d5999333794b9ee918340a1" +source = "git+https://github.com/pop-os/libcosmic#f6039597b72d3eefe2ee1d6528a04077982db238" dependencies = [ "futures", "iced_core", @@ -3246,7 +3246,7 @@ dependencies = [ [[package]] name = "iced_graphics" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#421552dea1c06e876d5999333794b9ee918340a1" +source = "git+https://github.com/pop-os/libcosmic#f6039597b72d3eefe2ee1d6528a04077982db238" dependencies = [ "bitflags 2.10.0", "bytemuck", @@ -3268,7 +3268,7 @@ dependencies = [ [[package]] name = "iced_renderer" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#421552dea1c06e876d5999333794b9ee918340a1" +source = "git+https://github.com/pop-os/libcosmic#f6039597b72d3eefe2ee1d6528a04077982db238" dependencies = [ "iced_graphics", "iced_tiny_skia", @@ -3280,7 +3280,7 @@ dependencies = [ [[package]] name = "iced_runtime" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#421552dea1c06e876d5999333794b9ee918340a1" +source = "git+https://github.com/pop-os/libcosmic#f6039597b72d3eefe2ee1d6528a04077982db238" dependencies = [ "bytes", "cosmic-client-toolkit", @@ -3295,7 +3295,7 @@ dependencies = [ [[package]] name = "iced_tiny_skia" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#421552dea1c06e876d5999333794b9ee918340a1" +source = "git+https://github.com/pop-os/libcosmic#f6039597b72d3eefe2ee1d6528a04077982db238" dependencies = [ "bytemuck", "cosmic-text", @@ -3311,7 +3311,7 @@ dependencies = [ [[package]] name = "iced_wgpu" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#421552dea1c06e876d5999333794b9ee918340a1" +source = "git+https://github.com/pop-os/libcosmic#f6039597b72d3eefe2ee1d6528a04077982db238" dependencies = [ "as-raw-xcb-connection", "bitflags 2.10.0", @@ -3342,7 +3342,7 @@ dependencies = [ [[package]] name = "iced_widget" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#421552dea1c06e876d5999333794b9ee918340a1" +source = "git+https://github.com/pop-os/libcosmic#f6039597b72d3eefe2ee1d6528a04077982db238" dependencies = [ "cosmic-client-toolkit", "dnd", @@ -3361,7 +3361,7 @@ dependencies = [ [[package]] name = "iced_winit" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#421552dea1c06e876d5999333794b9ee918340a1" +source = "git+https://github.com/pop-os/libcosmic#f6039597b72d3eefe2ee1d6528a04077982db238" dependencies = [ "cosmic-client-toolkit", "dnd", @@ -4125,7 +4125,7 @@ checksum = "37c93d8daa9d8a012fd8ab92f088405fb202ea0b6ab73ee2482ae66af4f42091" [[package]] name = "libcosmic" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#421552dea1c06e876d5999333794b9ee918340a1" +source = "git+https://github.com/pop-os/libcosmic#f6039597b72d3eefe2ee1d6528a04077982db238" dependencies = [ "apply", "ashpd 0.12.0", diff --git a/cosmic-applet-network/src/app.rs b/cosmic-applet-network/src/app.rs index 77537831..ae956bd1 100644 --- a/cosmic-applet-network/src/app.rs +++ b/cosmic-applet-network/src/app.rs @@ -15,6 +15,7 @@ use std::{ borrow::Cow, collections::{BTreeMap, BTreeSet}, sync::{Arc, LazyLock}, + time::Duration, }; use cosmic::{ @@ -590,25 +591,42 @@ pub fn update_devices(conn: zbus::Connection) -> Task { impl CosmicNetworkApplet { fn connect(&mut self, conn: zbus::Connection) -> Task { if self.nm_task.is_none() { + let popup = self.popup; let (canceller, task) = crate::utils::forward_event_loop(move |emitter| async move { let (tx, mut rx) = futures::channel::mpsc::channel(1); - let watchers = std::pin::pin!(async move { - futures::join!( - network_manager::watch(conn.clone(), tx.clone()), - network_manager::active_conns::watch(conn.clone(), tx.clone()), - network_manager::wireless_enabled::watch(conn.clone(), tx.clone()), - network_manager::watch_connections_changed(conn, tx) - ); - }); + if popup.is_some() { + let watchers = std::pin::pin!(async move { + futures::join!( + network_manager::watch(conn.clone(), tx.clone()), + network_manager::active_conns::watch(conn.clone(), tx.clone(),), + network_manager::wireless_enabled::watch(conn.clone(), tx.clone()), + network_manager::watch_connections_changed(conn, tx,) + ); + }); + let forwarder = std::pin::pin!(async move { + while let Some(message) = rx.next().await { + _ = emitter.emit(Message::NetworkManager(message)).await; + } + }); - let forwarder = std::pin::pin!(async move { - while let Some(message) = rx.next().await { - _ = emitter.emit(Message::NetworkManager(message)).await; - } - }); + futures::future::select(watchers, forwarder).await; + } else { + let watchers = std::pin::pin!(async move { + futures::join!( + network_manager::watch(conn.clone(), tx.clone()), + network_manager::active_conns::watch(conn.clone(), tx.clone(),), + network_manager::wireless_enabled::watch(conn.clone(), tx.clone()), + ); + }); + let forwarder = std::pin::pin!(async move { + while let Some(message) = rx.next().await { + _ = emitter.emit(Message::NetworkManager(message)).await; + } + }); - futures::future::select(watchers, forwarder).await; + futures::future::select(watchers, forwarder).await; + }; }); self.nm_task = Some(canceller); @@ -802,15 +820,7 @@ impl cosmic::Application for CosmicNetworkApplet { None, ); - if let Some(tx) = self.nm_sender.as_mut() { - if let Err(err) = tx.unbounded_send(network_manager::Request::Reload) { - if err.is_disconnected() { - return system_conn().map(cosmic::Action::App); - } - - tracing::error!("{err:?}"); - } - } + tasks.push(system_conn()); tasks.push(get_popup(popup_settings)); return Task::batch(tasks).map(cosmic::Action::App); @@ -898,13 +908,15 @@ impl cosmic::Application for CosmicNetworkApplet { self.new_connection = None; } Message::CloseRequested(id) => { - if let Some(cancel) = self.nm_task.take() { - _ = cancel.send(()); - } if Some(id) == self.popup { self.popup = None; + if let Some(cancel) = self.nm_task.take() { + _ = cancel.send(()); + } + + self.secret_tx = None; + return system_conn().map(cosmic::Action::App); } - self.secret_tx = None; } Message::OpenSettings => { let exec = "cosmic-settings network".to_string(); @@ -1972,15 +1984,8 @@ impl cosmic::Application for CosmicNetworkApplet { .as_subscription() .map(|(_, now)| Message::Frame(now)); let token_sub = activation_token_subscription(0).map(Message::Token); - if let Some((conn, id)) = self.conn.clone().zip(self.popup.as_ref()) { - Subscription::batch([ - active_conns_subscription(*id, conn).map(|e| Message::NetworkManager(e)), - timeline, - token_sub, - ]) - } else { - Subscription::batch([timeline, token_sub]) - } + + Subscription::batch([timeline, token_sub]) } fn style(&self) -> Option {