From 1eaccc0f24c34d6b918e1906a7bf449c1a265d75 Mon Sep 17 00:00:00 2001 From: Ian Douglas Scott Date: Sat, 22 Jun 2024 19:49:51 -0700 Subject: [PATCH] status-area: Send `opened`/`closed` dbus menu events --- cosmic-applet-status-area/src/components/app.rs | 12 +++++++----- .../src/components/status_menu.rs | 10 +++++++++- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/cosmic-applet-status-area/src/components/app.rs b/cosmic-applet-status-area/src/components/app.rs index acfa149e..925ab76e 100644 --- a/cosmic-applet-status-area/src/components/app.rs +++ b/cosmic-applet-status-area/src/components/app.rs @@ -150,11 +150,11 @@ impl cosmic::Application for App { None }; if self.open_menu.is_some() { - self.menus[&id].about_to_show(); + self.menus[&id].opened(); let mut cmds = Vec::new(); - if let Some(id) = self.popup.take() { - cmds.push(destroy_popup(id)); + if let Some(popup_id) = self.popup.take() { + cmds.push(destroy_popup(popup_id)); } let popup_id = self.next_popup_id(); let mut popup_settings = self.core.applet.get_popup_settings( @@ -180,8 +180,10 @@ impl cosmic::Application for App { } cmds.push(get_popup(popup_settings)); return Command::batch(cmds); - } else if let Some(id) = self.popup { - return destroy_popup(id); + } else if let Some(popup_id) = self.popup { + self.menus[&id].closed(); + + return destroy_popup(popup_id); } Command::none() } diff --git a/cosmic-applet-status-area/src/components/status_menu.rs b/cosmic-applet-status-area/src/components/status_menu.rs index 4db5ba73..c961ee78 100644 --- a/cosmic-applet-status-area/src/components/status_menu.rs +++ b/cosmic-applet-status-area/src/components/status_menu.rs @@ -84,12 +84,20 @@ impl State { self.item.layout_subscription().map(Msg::Layout) } - pub fn about_to_show(&self) { + pub fn opened(&self) { let menu_proxy = self.item.menu_proxy().clone(); tokio::spawn(async move { + let _ = menu_proxy.event(0, "opened", &0i32.into(), 0).await; let _ = menu_proxy.about_to_show(0).await; }); } + + pub fn closed(&self) { + let menu_proxy = self.item.menu_proxy().clone(); + tokio::spawn(async move { + let _ = menu_proxy.event(0, "closed", &0i32.into(), 0).await; + }); + } } fn layout_view(layout: &Layout, expanded: Option) -> cosmic::Element {