diff --git a/cosmic-applet-status-area/src/components/app.rs b/cosmic-applet-status-area/src/components/app.rs index 7e3510a9..acfa149e 100644 --- a/cosmic-applet-status-area/src/components/app.rs +++ b/cosmic-applet-status-area/src/components/app.rs @@ -150,6 +150,8 @@ impl cosmic::Application for App { None }; if self.open_menu.is_some() { + self.menus[&id].about_to_show(); + let mut cmds = Vec::new(); if let Some(id) = self.popup.take() { cmds.push(destroy_popup(id)); diff --git a/cosmic-applet-status-area/src/components/status_menu.rs b/cosmic-applet-status-area/src/components/status_menu.rs index cff66145..4db5ba73 100644 --- a/cosmic-applet-status-area/src/components/status_menu.rs +++ b/cosmic-applet-status-area/src/components/status_menu.rs @@ -83,6 +83,13 @@ impl State { pub fn subscription(&self) -> iced::Subscription { self.item.layout_subscription().map(Msg::Layout) } + + pub fn about_to_show(&self) { + let menu_proxy = self.item.menu_proxy().clone(); + tokio::spawn(async move { + let _ = menu_proxy.about_to_show(0).await; + }); + } } fn layout_view(layout: &Layout, expanded: Option) -> cosmic::Element { diff --git a/cosmic-applet-status-area/src/subscriptions/status_notifier_item.rs b/cosmic-applet-status-area/src/subscriptions/status_notifier_item.rs index 105ec922..63f15105 100644 --- a/cosmic-applet-status-area/src/subscriptions/status_notifier_item.rs +++ b/cosmic-applet-status-area/src/subscriptions/status_notifier_item.rs @@ -235,6 +235,8 @@ trait DBusMenu { fn event(&self, id: i32, event_id: &str, data: &OwnedValue, timestamp: u32) -> zbus::Result<()>; + fn about_to_show(&self, id: i32) -> zbus::Result; + #[zbus(signal)] fn layout_updated(&self, revision: u32, parent: i32) -> zbus::Result<()>; }