Also expose screensaver DBus protocol at path /ScreenSaver

`vlc`, at least, uses this.
This commit is contained in:
Ian Douglas Scott 2024-10-29 16:40:16 -07:00
parent c7084c1fe4
commit b0b2ccd680

View file

@ -17,9 +17,10 @@ pub struct Inhibitor {
client: zbus::names::UniqueName<'static>, client: zbus::names::UniqueName<'static>,
} }
pub struct Screensaver { #[derive(Clone)]
struct Screensaver {
inhibitors: Arc<Mutex<Vec<Inhibitor>>>, inhibitors: Arc<Mutex<Vec<Inhibitor>>>,
last_cookie: AtomicU32, last_cookie: Arc<AtomicU32>,
event_sender: EventSender, event_sender: EventSender,
} }
@ -80,15 +81,18 @@ pub async fn serve(conn: &zbus::Connection, event_sender: EventSender) -> zbus::
zbus::fdo::RequestNameFlags::ReplaceExisting.into(), zbus::fdo::RequestNameFlags::ReplaceExisting.into(),
) )
.await?; .await?;
conn.object_server() let screensaver = Screensaver {
.at( inhibitors: inhibitors.clone(),
"/org/freedesktop/ScreenSaver", event_sender: event_sender.clone(),
Screensaver { last_cookie: Arc::new(AtomicU32::new(0)),
inhibitors: inhibitors.clone(), };
event_sender: event_sender.clone(), // Clients vary in which path they use
last_cookie: AtomicU32::new(0), let object_server = conn.object_server();
}, object_server
) .at("/ScreenSaver", screensaver.clone())
.await?;
object_server
.at("/org/freedesktop/ScreenSaver", screensaver)
.await?; .await?;
// If a client disconnects from DBus, remove any inhibitors it has added. // If a client disconnects from DBus, remove any inhibitors it has added.