diff --git a/src/freedesktop_screensaver.rs b/src/freedesktop_screensaver.rs index b895081..8dc2ef3 100644 --- a/src/freedesktop_screensaver.rs +++ b/src/freedesktop_screensaver.rs @@ -73,30 +73,29 @@ impl Screensaver { } } -pub async fn serve(conn: &zbus::Connection, event_sender: EventSender) -> zbus::Result<()> { +pub async fn serve(event_sender: EventSender) -> zbus::Result<()> { let inhibitors = Arc::new(Mutex::new(Vec::new())); - conn.request_name_with_flags( - "org.freedesktop.ScreenSaver", - zbus::fdo::RequestNameFlags::ReplaceExisting.into(), - ) - .await?; let screensaver = Screensaver { inhibitors: inhibitors.clone(), event_sender: event_sender.clone(), last_cookie: Arc::new(AtomicU32::new(0)), }; + // Clients vary in which path they use - let object_server = conn.object_server(); - object_server - .at("/ScreenSaver", screensaver.clone()) - .await?; - object_server - .at("/org/freedesktop/ScreenSaver", screensaver) + let conn = zbus::connection::Builder::session()? + .serve_at("/ScreenSaver", screensaver.clone())? + .serve_at("/org/freedesktop/ScreenSaver", screensaver)? + .build() .await?; + conn.request_name_with_flags( + "org.freedesktop.ScreenSaver", + zbus::fdo::RequestNameFlags::ReplaceExisting.into(), + ) + .await?; // If a client disconnects from DBus, remove any inhibitors it has added. - let dbus = zbus::fdo::DBusProxy::new(conn).await?; + let dbus = zbus::fdo::DBusProxy::new(&conn).await?; let mut name_owner_stream = dbus.receive_name_owner_changed().await?; while let Some(event) = name_owner_stream.next().await { let args = event.args()?; diff --git a/src/main.rs b/src/main.rs index 9abbeef..ac9481b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -291,10 +291,8 @@ fn main() { .unwrap(); scheduler .schedule(async move { - if let Ok(connection) = zbus::Connection::session().await { - if let Err(err) = freedesktop_screensaver::serve(&connection, sender).await { - log::error!("failed to serve FreeDesktop screensaver interface: {}", err); - } + if let Err(err) = freedesktop_screensaver::serve(sender).await { + log::error!("failed to serve FreeDesktop screensaver interface: {}", err); } }) .unwrap();