fix(status-area): update menu on property update too
Updated menu text (activate/deactivate) or checkmark trigger a property update and not a layout update.
This commit is contained in:
parent
c113768ac5
commit
a502720a42
1 changed files with 16 additions and 2 deletions
|
|
@ -86,8 +86,15 @@ impl StatusNotifierItem {
|
||||||
format!("status-notifier-item-layout-{}", &self.name),
|
format!("status-notifier-item-layout-{}", &self.name),
|
||||||
async move {
|
async move {
|
||||||
let initial = futures::stream::once(get_layout(menu_proxy.clone()));
|
let initial = futures::stream::once(get_layout(menu_proxy.clone()));
|
||||||
let layout_updated_stream = menu_proxy.receive_layout_updated().await.unwrap();
|
|
||||||
let updates = layout_updated_stream.then(move |_| get_layout(menu_proxy.clone()));
|
let layout_updated = menu_proxy.receive_layout_updated().await.unwrap();
|
||||||
|
let props_updated = menu_proxy.receive_items_properties_updated().await.unwrap();
|
||||||
|
|
||||||
|
// Merge both streams - any update triggers a layout refetch
|
||||||
|
let updates =
|
||||||
|
futures::stream_select!(layout_updated.map(|_| ()), props_updated.map(|_| ()))
|
||||||
|
.then(move |()| get_layout(menu_proxy.clone()));
|
||||||
|
|
||||||
initial.chain(updates)
|
initial.chain(updates)
|
||||||
}
|
}
|
||||||
.flatten_stream(),
|
.flatten_stream(),
|
||||||
|
|
@ -283,4 +290,11 @@ pub trait DBusMenu {
|
||||||
|
|
||||||
#[zbus(signal)]
|
#[zbus(signal)]
|
||||||
fn layout_updated(&self, revision: u32, parent: i32) -> zbus::Result<()>;
|
fn layout_updated(&self, revision: u32, parent: i32) -> zbus::Result<()>;
|
||||||
|
|
||||||
|
#[zbus(signal)]
|
||||||
|
fn items_properties_updated(
|
||||||
|
&self,
|
||||||
|
updated_props: Vec<(i32, std::collections::HashMap<String, zvariant::OwnedValue>)>,
|
||||||
|
removed_props: Vec<(i32, Vec<String>)>,
|
||||||
|
) -> zbus::Result<()>;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue