From a5dfc883b8f2b2aaa65f1d7ec477f2ea9316acd4 Mon Sep 17 00:00:00 2001 From: Ian Douglas Scott Date: Sat, 22 Jun 2024 19:40:25 -0700 Subject: [PATCH] status-area: Call `AboutToShow` before showing menu Comments in `gnome-shell-extension-appindicator` indicate this is necessary for some clients. Checking the return value doesn't seem to be. There are more comments about Dropbox; more may be needed to fix it, which doesn't seem to behave very properly. --- cosmic-applet-status-area/src/components/app.rs | 2 ++ cosmic-applet-status-area/src/components/status_menu.rs | 7 +++++++ .../src/subscriptions/status_notifier_item.rs | 2 ++ 3 files changed, 11 insertions(+) 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<()>; }