Implement suspend with logind
This commit is contained in:
parent
5d0999df83
commit
13e3dcd911
5 changed files with 58 additions and 1 deletions
|
|
@ -198,6 +198,7 @@ pub enum Message {
|
|||
BackgroundState(cosmic_bg_config::state::State),
|
||||
Prompt(String, bool, Option<String>),
|
||||
Submit,
|
||||
Suspend,
|
||||
Error(String),
|
||||
Exit,
|
||||
}
|
||||
|
|
@ -422,6 +423,21 @@ impl cosmic::Application for App {
|
|||
},
|
||||
None => log::warn!("tried to submit without prompt"),
|
||||
},
|
||||
Message::Suspend => {
|
||||
#[cfg(feature = "logind")]
|
||||
return Command::perform(
|
||||
async move {
|
||||
match crate::logind::suspend().await {
|
||||
Ok(()) => message::none(),
|
||||
Err(err) => {
|
||||
log::error!("failed to suspend: {:?}", err);
|
||||
message::app(Message::Error(err.to_string()))
|
||||
}
|
||||
}
|
||||
},
|
||||
|x| x,
|
||||
);
|
||||
}
|
||||
Message::Error(error) => {
|
||||
self.error_opt = Some(error);
|
||||
}
|
||||
|
|
@ -499,7 +515,7 @@ impl cosmic::Application for App {
|
|||
.on_press(Message::None),
|
||||
widget::button(widget::icon::from_name("system-suspend-symbolic"))
|
||||
.padding(12.0)
|
||||
.on_press(Message::None),
|
||||
.on_press(Message::Suspend),
|
||||
]
|
||||
.padding([16.0, 0.0, 0.0, 0.0])
|
||||
.spacing(8.0);
|
||||
|
|
|
|||
20
src/logind.rs
Normal file
20
src/logind.rs
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
use logind_zbus::manager::ManagerProxy;
|
||||
use zbus::{Connection, Result};
|
||||
|
||||
pub async fn power_off() -> Result<()> {
|
||||
let connection = Connection::system().await?;
|
||||
let manager = ManagerProxy::new(&connection).await?;
|
||||
manager.reboot(false).await
|
||||
}
|
||||
|
||||
pub async fn reboot() -> Result<()> {
|
||||
let connection = Connection::system().await?;
|
||||
let manager = ManagerProxy::new(&connection).await?;
|
||||
manager.reboot(false).await
|
||||
}
|
||||
|
||||
pub async fn suspend() -> Result<()> {
|
||||
let connection = Connection::system().await?;
|
||||
let manager = ManagerProxy::new(&connection).await?;
|
||||
manager.suspend(false).await
|
||||
}
|
||||
|
|
@ -5,6 +5,9 @@ mod greeter;
|
|||
mod image_container;
|
||||
mod locker;
|
||||
|
||||
#[cfg(feature = "logind")]
|
||||
mod logind;
|
||||
|
||||
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
env_logger::init();
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue