From 845ca1e39619fe7e6e57d200784d20b3ee4d6415 Mon Sep 17 00:00:00 2001 From: Ian Douglas Scott Date: Fri, 24 Sep 2021 11:30:44 -0700 Subject: [PATCH] Call `RegisterStatusNotifierHost` --- src/status_area.rs | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/status_area.rs b/src/status_area.rs index 70b9fb83..2784035d 100644 --- a/src/status_area.rs +++ b/src/status_area.rs @@ -1,8 +1,3 @@ -// TODO -// - Implement StatusNotifierWatcher if one is not running -// - Register with StatusNotiferWatcher -// - Handle signals for registered/unreigisted items - use cascade::cascade; use gtk4::{ gio, @@ -52,6 +47,10 @@ impl ObjectImpl for StatusAreaInner { } }; + if let Err(err) = watcher.register_host().await { + eprintln!("Failed to register status notifier host: {}", err); + } + for name in watcher.registered_items().await { glib::MainContext::default().spawn_local(clone!(@strong obj => async move { obj.item_registered(&name).await; @@ -160,4 +159,17 @@ impl StatusNotifierWatcher { }) .unwrap() } + + async fn register_host(&self) -> Result<(), glib::Error> { + let service = self.0.connection().unique_name().unwrap(); + self.0 + .call_future( + "RegisterStatusNotifierHost", + Some(&(service.as_str(),).to_variant()), + gio::DBusCallFlags::NONE, + 1000, + ) + .await?; + Ok(()) + } }