Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4f055935d4 |
@@ -1,5 +1,9 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## 0.4.3 (2026-10-05)
|
||||||
|
|
||||||
|
- Backlight: a config with a `!backlight` widget on a machine without `/sys/class/backlight` entries (or with a `device` name that does not exist) panicked at start ("did not find backlight device"), fatal with `panic = "abort"`. The widget now warns once on stderr, renders empty and ignores clicks, so one config can be shared between a laptop and a desktop.
|
||||||
|
|
||||||
## 0.4.2 (2026-10-03)
|
## 0.4.2 (2026-10-03)
|
||||||
|
|
||||||
- Fonts: a `font_paths` entry pointing at a file that does not exist on this machine made the font-loader thread panic and abort wldash ("Font file not found"). Pinned paths that are missing now fall back to fontconfig by name, with one line on stderr; a font that cannot be resolved at all exits with a clear message instead of a backtrace.
|
- Fonts: a `font_paths` entry pointing at a file that does not exist on this machine made the font-loader thread panic and abort wldash ("Font file not found"). Pinned paths that are missing now fall back to fontconfig by name, with one line on stderr; a font that cannot be resolved at all exits with a clear message instead of a backtrace.
|
||||||
|
|||||||
Generated
+1
-1
@@ -1071,7 +1071,7 @@ checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wldash"
|
name = "wldash"
|
||||||
version = "0.4.2"
|
version = "0.4.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"calloop",
|
"calloop",
|
||||||
"chrono",
|
"chrono",
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "wldash"
|
name = "wldash"
|
||||||
version = "0.4.2"
|
version = "0.4.3"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[profile.release]
|
[profile.release]
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
# project.uhhm.no (namespace bl). pkgver is the version; the tag has
|
# project.uhhm.no (namespace bl). pkgver is the version; the tag has
|
||||||
# to agree with it and with Cargo.toml.
|
# to agree with it and with Cargo.toml.
|
||||||
pkgname=wldash
|
pkgname=wldash
|
||||||
pkgver=0.4.2
|
pkgver=0.4.3
|
||||||
pkgrel=1
|
pkgrel=1
|
||||||
pkgdesc="Dashboard/launcher/control-panel for wlroots-style Wayland compositors (layer-shell)"
|
pkgdesc="Dashboard/launcher/control-panel for wlroots-style Wayland compositors (layer-shell)"
|
||||||
arch=('x86_64' 'aarch64')
|
arch=('x86_64' 'aarch64')
|
||||||
|
|||||||
+43
-11
@@ -26,7 +26,11 @@ fn write_file_as_u64(path: &Path, value: u64) -> Result<(), Error> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub struct Backlight {
|
pub struct Backlight {
|
||||||
device_path: PathBuf,
|
/// `None` when no backlight exists on this machine: the widget then
|
||||||
|
/// renders empty and ignores clicks instead of taking wldash down.
|
||||||
|
/// Configs are shared between hosts, so a laptop config running on a
|
||||||
|
/// desktop must not panic here.
|
||||||
|
device_path: Option<PathBuf>,
|
||||||
cur: u64,
|
cur: u64,
|
||||||
max: u64,
|
max: u64,
|
||||||
dirty: bool,
|
dirty: bool,
|
||||||
@@ -46,10 +50,13 @@ fn find_device() -> Option<PathBuf> {
|
|||||||
|
|
||||||
impl Backlight {
|
impl Backlight {
|
||||||
fn update(&mut self) {
|
fn update(&mut self) {
|
||||||
if let Ok(cur) = read_file_as_u64(self.device_path.join("brightness").as_path()) {
|
let Some(dev) = &self.device_path else {
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
if let Ok(cur) = read_file_as_u64(dev.join("brightness").as_path()) {
|
||||||
self.cur = cur;
|
self.cur = cur;
|
||||||
}
|
}
|
||||||
if let Ok(max) = read_file_as_u64(self.device_path.join("max_brightness").as_path()) {
|
if let Ok(max) = read_file_as_u64(dev.join("max_brightness").as_path()) {
|
||||||
self.max = max;
|
self.max = max;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -58,11 +65,30 @@ impl Backlight {
|
|||||||
#[allow(clippy::new_ret_no_self)]
|
#[allow(clippy::new_ret_no_self)]
|
||||||
pub fn new(path: Option<&str>, fm: &mut FontMap, font: &'static str, size: f32) -> BarWidget {
|
pub fn new(path: Option<&str>, fm: &mut FontMap, font: &'static str, size: f32) -> BarWidget {
|
||||||
let device_path = match path {
|
let device_path = match path {
|
||||||
Some(path) => Some(Path::new("/sys/class/backlight").join(path)),
|
Some(path) => {
|
||||||
None => find_device(),
|
let p = Path::new("/sys/class/backlight").join(path);
|
||||||
|
if p.is_dir() {
|
||||||
|
Some(p)
|
||||||
|
} else {
|
||||||
|
eprintln!(
|
||||||
|
"wldash: backlight device {:?} not found, widget disabled",
|
||||||
|
p
|
||||||
|
);
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
None => {
|
||||||
|
let p = find_device();
|
||||||
|
if p.is_none() {
|
||||||
|
eprintln!(
|
||||||
|
"wldash: no backlight device under /sys/class/backlight, widget disabled"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
p
|
||||||
|
}
|
||||||
};
|
};
|
||||||
let mut dev = Backlight {
|
let mut dev = Backlight {
|
||||||
device_path: device_path.expect("did not find backlight device"),
|
device_path,
|
||||||
cur: 0,
|
cur: 0,
|
||||||
max: 0,
|
max: 0,
|
||||||
dirty: true,
|
dirty: true,
|
||||||
@@ -77,9 +103,13 @@ impl Backlight {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn set(&mut self, brightness: f32) {
|
pub fn set(&mut self, brightness: f32) {
|
||||||
|
let Some(dev) = &self.device_path else {
|
||||||
|
return;
|
||||||
|
};
|
||||||
let val = (self.max as f32 * brightness.clamp(0.0, 1.0)) as u64;
|
let val = (self.max as f32 * brightness.clamp(0.0, 1.0)) as u64;
|
||||||
let _ = write_file_as_u64(self.device_path.join("brightness").as_path(), val);
|
let brightness_path = dev.join("brightness");
|
||||||
if let Ok(cur) = read_file_as_u64(self.device_path.join("brightness").as_path()) {
|
let _ = write_file_as_u64(&brightness_path, val);
|
||||||
|
if let Ok(cur) = read_file_as_u64(&brightness_path) {
|
||||||
self.cur = cur;
|
self.cur = cur;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -93,12 +123,14 @@ impl BarWidgetImpl for Backlight {
|
|||||||
self.dirty
|
self.dirty
|
||||||
}
|
}
|
||||||
fn value(&mut self) -> f32 {
|
fn value(&mut self) -> f32 {
|
||||||
|
self.dirty = false;
|
||||||
|
if self.device_path.is_none() {
|
||||||
|
return 0.0;
|
||||||
|
}
|
||||||
if self.max == 0 || self.cur > self.max {
|
if self.max == 0 || self.cur > self.max {
|
||||||
// what.
|
// Sysfs handed us nonsense; show full rather than a bogus ratio.
|
||||||
return 1.0;
|
return 1.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
self.dirty = false;
|
|
||||||
self.cur as f32 / self.max as f32
|
self.cur as f32 / self.max as f32
|
||||||
}
|
}
|
||||||
fn color(&self) -> Color {
|
fn color(&self) -> Color {
|
||||||
|
|||||||
Reference in New Issue
Block a user