battery: More work on brightness handling

This commit is contained in:
Ian Douglas Scott 2022-06-21 16:04:39 -07:00
parent 89f82fd829
commit ed42b4c71e
2 changed files with 29 additions and 3 deletions

View file

@ -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

View file

@ -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
}
}
}
}