diff --git a/cosmic-applet-status-area/src/components/app.rs b/cosmic-applet-status-area/src/components/app.rs index 03e56e9d..c496a80d 100644 --- a/cosmic-applet-status-area/src/components/app.rs +++ b/cosmic-applet-status-area/src/components/app.rs @@ -453,7 +453,8 @@ impl cosmic::Application for App { subscriptions.push(status_notifier_watcher::subscription().map(Msg::StatusNotifier)); for (id, menu) in &self.menus { - subscriptions.push(menu.subscription().with(*id).map(Msg::StatusMenu)); + let is_open = self.open_menu == Some(*id); + subscriptions.push(menu.subscription(is_open).with(*id).map(Msg::StatusMenu)); } subscriptions.push(activation_token_subscription(0).map(Msg::Token)); diff --git a/cosmic-applet-status-area/src/components/status_menu.rs b/cosmic-applet-status-area/src/components/status_menu.rs index 8ca6bd85..32d6cbdc 100644 --- a/cosmic-applet-status-area/src/components/status_menu.rs +++ b/cosmic-applet-status-area/src/components/status_menu.rs @@ -157,11 +157,14 @@ impl State { } } - pub fn subscription(&self) -> iced::Subscription { - iced::Subscription::batch([ - self.item.layout_subscription().map(Msg::Layout), - self.item.icon_subscription().map(Msg::Icon), - ]) + pub fn subscription(&self, is_open: bool) -> iced::Subscription { + let mut subscriptions = vec![self.item.icon_subscription().map(Msg::Icon)]; + + if is_open { + subscriptions.push(self.item.layout_subscription().map(Msg::Layout)); + } + + iced::Subscription::batch(subscriptions) } pub fn opened(&self) {