battery: More work on brightness handling
This commit is contained in:
parent
89f82fd829
commit
ed42b4c71e
2 changed files with 29 additions and 3 deletions
|
|
@ -1,3 +1,6 @@
|
|||
// TODO: use udev to monitor for brightness changes?
|
||||
// How should key bindings be handled? Need something like gnome-settings-daemon?
|
||||
|
||||
use std::{
|
||||
fs::{self, File},
|
||||
io::{self, Read},
|
||||
|
|
@ -5,17 +8,33 @@ use std::{
|
|||
str::FromStr,
|
||||
};
|
||||
|
||||
#[zbus::dbus_proxy(
|
||||
default_service = "org.freedesktop.login1",
|
||||
interface = "org.freedesktop.login1.Session"
|
||||
)]
|
||||
trait LogindSession {
|
||||
fn set_brightness(&self, subsystem: &str, name: &str, brightness: u32) -> zbus::Result<()>;
|
||||
}
|
||||
|
||||
struct Backlight(PathBuf);
|
||||
|
||||
impl Backlight {
|
||||
fn brightness(&self) -> Option<i64> {
|
||||
fn brightness(&self) -> Option<u32> {
|
||||
self.prop("brightness")
|
||||
}
|
||||
|
||||
fn max_brightness(&self) -> Option<i64> {
|
||||
fn max_brightness(&self) -> Option<u32> {
|
||||
self.prop("max_brightness")
|
||||
}
|
||||
|
||||
async fn set_brightness(
|
||||
&self,
|
||||
session: &LogindSessionProxy<'_>,
|
||||
value: u32,
|
||||
) -> zbus::Result<()> {
|
||||
session.set_brightness("backlight", "", value).await // XXX
|
||||
}
|
||||
|
||||
fn prop<T: FromStr>(&self, name: &str) -> Option<T> {
|
||||
let mut file = File::open(&self.0.join(name)).ok()?;
|
||||
let mut s = String::new();
|
||||
|
|
@ -39,3 +58,5 @@ fn backlight() -> io::Result<Option<Backlight>> {
|
|||
}
|
||||
Ok(best_backlight)
|
||||
}
|
||||
|
||||
// TODO: keyboard backlight
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
use futures::prelude::*;
|
||||
use gtk4::{glib, prelude::*};
|
||||
use relm4::{ComponentParts, ComponentSender, RelmApp, SimpleComponent, WidgetPlus};
|
||||
use std::time::Duration;
|
||||
use std::{process::Command, time::Duration};
|
||||
|
||||
mod backlight;
|
||||
mod upower;
|
||||
|
|
@ -164,6 +164,11 @@ impl SimpleComponent for AppModel {
|
|||
|
||||
gtk4::Button {
|
||||
set_label: "Power Settings...",
|
||||
connect_clicked => move |_| {
|
||||
// XXX open subpanel
|
||||
let _ = Command::new("cosmic-settings").spawn();
|
||||
// TODO hide
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue