WIP org.freedesktop.ScreenSaver
This commit is contained in:
parent
163356f012
commit
a0ddfa80b7
2 changed files with 59 additions and 1 deletions
46
src/freedesktop_screensaver.rs
Normal file
46
src/freedesktop_screensaver.rs
Normal 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(())
|
||||
}
|
||||
14
src/main.rs
14
src/main.rs
|
|
@ -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, |_, _, _| {})
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue