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.
This commit is contained in:
Ian Douglas Scott 2024-06-22 19:40:25 -07:00 committed by Jeremy Soller
parent 1370558546
commit a5dfc883b8
3 changed files with 11 additions and 0 deletions

View file

@ -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));

View file

@ -83,6 +83,13 @@ impl State {
pub fn subscription(&self) -> iced::Subscription<Msg> {
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<i32>) -> cosmic::Element<Msg> {

View file

@ -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<bool>;
#[zbus(signal)]
fn layout_updated(&self, revision: u32, parent: i32) -> zbus::Result<()>;
}