fix: clear popup state when it is dismissed by the compositor

This commit is contained in:
Ashley Wulber 2023-09-12 14:29:34 -04:00 • committed by Ashley Wulber
parent f4cc4cecd0
commit 56d96e5282
8 changed files with 75 additions and 0 deletions

View file

@ -223,6 +223,7 @@ enum Message {
Favorite(String), Favorite(String),
UnFavorite(String), UnFavorite(String),
Popup(String), Popup(String),
CloseRequested(window::Id),
ClosePopup, ClosePopup,
Activate(ZcosmicToplevelHandleV1), Activate(ZcosmicToplevelHandleV1),
Exec(String), Exec(String),
@ -819,6 +820,11 @@ impl cosmic::Application for CosmicAppList {
}) })
.collect(); .collect();
} }
Message::CloseRequested(id) => {
if Some(id) == self.popup.as_ref().map(|p| p.0) {
self.popup = None;
}
}
} }
Command::none() Command::none()
@ -1092,4 +1098,8 @@ impl cosmic::Application for CosmicAppList {
fn style(&self) -> Option<<Theme as application::StyleSheet>::Style> { fn style(&self) -> Option<<Theme as application::StyleSheet>::Style> {
Some(cosmic::app::applet::style()) Some(cosmic::app::applet::style())
} }
fn on_close_requested(&self, id: window::Id) -> Option<Message> {
Some(Message::CloseRequested(id))
}
} }

View file

@ -124,6 +124,7 @@ enum Message {
InputChanged(String), InputChanged(String),
Pulse(pulse::Event), Pulse(pulse::Event),
TogglePopup, TogglePopup,
CloseRequested(window::Id),
ToggleMediaControlsInTopPanel(chain::Toggler, bool), ToggleMediaControlsInTopPanel(chain::Toggler, bool),
Frame(Instant), Frame(Instant),
} }
@ -317,6 +318,11 @@ impl cosmic::Application for Audio {
self.timeline.set_chain(chain).start(); self.timeline.set_chain(chain).start();
self.show_media_controls_in_top_panel = enabled; self.show_media_controls_in_top_panel = enabled;
} }
Message::CloseRequested(id) => {
if Some(id) == self.popup {
self.popup = None;
}
}
}; };
Command::none() Command::none()
@ -462,6 +468,10 @@ impl cosmic::Application for Audio {
.popup_container(container(content)) .popup_container(container(content))
.into() .into()
} }
fn on_close_requested(&self, id: window::Id) -> Option<Message> {
Some(Message::CloseRequested(id))
}
} }
fn revealer( fn revealer(

View file

@ -127,6 +127,7 @@ impl CosmicBatteryApplet {
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
enum Message { enum Message {
TogglePopup, TogglePopup,
CloseRequested(window::Id),
Update { Update {
on_battery: bool, on_battery: bool,
percent: f64, percent: f64,
@ -273,6 +274,11 @@ impl cosmic::Application for CosmicBatteryApplet {
let _ = tx.send(PowerProfileRequest::Set(profile)); let _ = tx.send(PowerProfileRequest::Set(profile));
} }
} }
Message::CloseRequested(id) => {
if Some(id) == self.popup {
self.popup = None;
}
}
} }
Command::none() Command::none()
} }
@ -467,6 +473,10 @@ impl cosmic::Application for CosmicBatteryApplet {
]) ])
} }
fn on_close_requested(&self, id: window::Id) -> Option<Message> {
Some(Message::CloseRequested(id))
}
fn style(&self) -> Option<<Theme as application::StyleSheet>::Style> { fn style(&self) -> Option<<Theme as application::StyleSheet>::Style> {
Some(cosmic::app::applet::style()) Some(cosmic::app::applet::style())
} }

View file

@ -56,6 +56,7 @@ impl CosmicBluetoothApplet {
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
enum Message { enum Message {
TogglePopup, TogglePopup,
CloseRequested(window::Id),
ToggleVisibleDevices(bool), ToggleVisibleDevices(bool),
Ignore, Ignore,
BluetoothEvent(BluerEvent), BluetoothEvent(BluerEvent),
@ -270,6 +271,11 @@ impl cosmic::Application for CosmicBluetoothApplet {
); );
} }
} }
Message::CloseRequested(id) => {
if Some(id) == self.popup {
self.popup = None;
}
}
} }
self.update_icon(); self.update_icon();
Command::none() Command::none()
@ -524,4 +530,8 @@ impl cosmic::Application for CosmicBluetoothApplet {
fn style(&self) -> Option<<Theme as application::StyleSheet>::Style> { fn style(&self) -> Option<<Theme as application::StyleSheet>::Style> {
Some(cosmic::app::applet::style()) Some(cosmic::app::applet::style())
} }
fn on_close_requested(&self, id: window::Id) -> Option<Message> {
Some(Message::CloseRequested(id))
}
} }

View file

@ -412,4 +412,8 @@ impl cosmic::Application for Window {
fn style(&self) -> Option<<Theme as application::StyleSheet>::Style> { fn style(&self) -> Option<<Theme as application::StyleSheet>::Style> {
Some(cosmic::app::applet::style()) Some(cosmic::app::applet::style())
} }
fn on_close_requested(&self, id: window::Id) -> Option<Message> {
Some(Message::PopupClosed(id))
}
} }

View file

@ -169,6 +169,7 @@ pub(crate) enum Message {
ActivateKnownWifi(String), ActivateKnownWifi(String),
Disconnect(String), Disconnect(String),
TogglePopup, TogglePopup,
CloseRequested(window::Id),
ToggleAirplaneMode(bool), ToggleAirplaneMode(bool),
ToggleWiFi(bool), ToggleWiFi(bool),
ToggleVisibleNetworks, ToggleVisibleNetworks,
@ -386,6 +387,11 @@ impl cosmic::Application for CosmicNetworkApplet {
}; };
let _ = tx.unbounded_send(NetworkManagerRequest::Disconnect(ssid)); let _ = tx.unbounded_send(NetworkManagerRequest::Disconnect(ssid));
} }
Message::CloseRequested(id) => {
if Some(id) == self.popup {
self.popup = None;
}
}
} }
Command::none() Command::none()
} }
@ -784,4 +790,8 @@ impl cosmic::Application for CosmicNetworkApplet {
fn style(&self) -> Option<<Theme as application::StyleSheet>::Style> { fn style(&self) -> Option<<Theme as application::StyleSheet>::Style> {
Some(cosmic::app::applet::style()) Some(cosmic::app::applet::style())
} }
fn on_close_requested(&self, id: window::Id) -> Option<Message> {
Some(Message::CloseRequested(id))
}
} }

View file

@ -84,6 +84,7 @@ impl Notifications {
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
enum Message { enum Message {
TogglePopup, TogglePopup,
CloseRequested(window::Id),
DoNotDisturb(chain::Toggler, bool), DoNotDisturb(chain::Toggler, bool),
Settings, Settings,
Frame(Instant), Frame(Instant),
@ -296,6 +297,11 @@ impl cosmic::Application for Notifications {
}; };
self.update_cards(id); self.update_cards(id);
} }
Message::CloseRequested(id) => {
if Some(id) == self.popup {
self.popup = None;
}
}
}; };
self.update_icon(); self.update_icon();
Command::none() Command::none()
@ -486,6 +492,10 @@ impl cosmic::Application for Notifications {
self.core.applet_helper.popup_container(content).into() self.core.applet_helper.popup_container(content).into()
} }
fn on_close_requested(&self, id: window::Id) -> Option<Message> {
Some(Message::CloseRequested(id))
}
} }
// todo put into libcosmic doing so will fix the row_button's border radius // todo put into libcosmic doing so will fix the row_button's border radius

View file

@ -40,6 +40,7 @@ enum Every {
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
enum Message { enum Message {
TogglePopup, TogglePopup,
CloseRequested(window::Id),
Tick, Tick,
Rectangle(RectangleUpdate<u32>), Rectangle(RectangleUpdate<u32>),
} }
@ -163,6 +164,12 @@ impl cosmic::Application for Time {
} }
Command::none() Command::none()
} }
Message::CloseRequested(id) => {
if Some(id) == self.popup {
self.popup = None;
}
Command::none()
}
} }
} }
@ -219,4 +226,8 @@ impl cosmic::Application for Time {
self.core.applet_helper.popup_container(content).into() self.core.applet_helper.popup_container(content).into()
} }
fn on_close_requested(&self, id: window::Id) -> Option<Message> {
Some(Message::CloseRequested(id))
}
} }