WIP org.freedesktop.ScreenSaver

This commit is contained in:
Ian Douglas Scott 2024-10-28 10:22:22 -07:00
parent 163356f012
commit a0ddfa80b7
2 changed files with 59 additions and 1 deletions

View file

@ -0,0 +1,46 @@
// https://specifications.freedesktop.org/idle-inhibit-spec/latest
use std::collections::HashMap;
#[derive(Debug)]
struct Inhibitor {
application_name: String,
reason_for_inhibit: String,
}
#[derive(Default)]
pub struct Screensaver {
inhibitors: HashMap<u32, Inhibitor>,
last_cookie: u32,
}
#[zbus::interface(name = "org.freedesktop.ScreenSaver")]
impl Screensaver {
fn inhibit(&mut self, application_name: String, reason_for_inhibit: String) -> u32 {
self.last_cookie += 1;
self.inhibitors.insert(
self.last_cookie,
Inhibitor {
application_name,
reason_for_inhibit,
},
);
self.last_cookie
}
fn un_inhibit(&mut self, cookie: u32) {
self.inhibitors.remove(&cookie);
}
}
pub async fn serve(conn: &zbus::Connection) -> zbus::Result<()> {
conn.request_name_with_flags(
"org.freedesktop.ScreenSaver",
zbus::fdo::RequestNameFlags::ReplaceExisting.into(),
)
.await?;
conn.object_server()
.at("/org/freedesktop/ScreenSaver", Screensaver::default())
.await?;
Ok(())
}

View file

@ -32,6 +32,8 @@ use wayland_protocols_wlr::{
output_power_management::v1::client::{zwlr_output_power_manager_v1, zwlr_output_power_v1},
};
mod freedesktop_screensaver;
const FADE_TIME: Duration = Duration::from_millis(2000);
#[derive(Debug)]
@ -238,7 +240,7 @@ fn main() {
let seat = globals
.bind::<wl_seat::WlSeat, _, _>(&qh, 1..=1, ())
.unwrap();
seat.get_pointer(&qh, ()); // XXX
seat.get_pointer(&qh, ());
let compositor = globals
.bind::<wl_compositor::WlCompositor, _, _>(&qh, 1..=1, ())
@ -330,6 +332,16 @@ fn main() {
}
})
.unwrap();
scheduler
.schedule(async {
if let Ok(connection) = zbus::Connection::session().await {
if let Err(err) = freedesktop_screensaver::serve(&connection).await {
log::error!("failed to serve FreeDesktop screensaver interface: {}", err);
}
std::future::pending::<()>().await;
}
})
.unwrap();
event_loop
.handle()
.insert_source(executor, |_, _, _| {})