fix: defer volume lock to after setup, fix sighandler cast comment, check pkg-config status

This commit is contained in:
Asger Geel Weirsøe
2026-05-06 11:58:21 +02:00
parent f93ca6267c
commit abf8aef1ef
3 changed files with 17 additions and 8 deletions

View File

@@ -11,7 +11,6 @@ ahfail-ui = { path = "../ahfail-ui" }
gtk = { version = "0.15", package = "gtk", features = ["v3_24"] }
gdk = { version = "0.15", package = "gdk", features = ["v3_24"] }
gstreamer = { version = "0.18", package = "gstreamer", features = ["v1_18"] }
gstreamer-player = { version = "0.18", package = "gstreamer-player" }
glib = { version = "0.15", package = "glib" }
libc = "0.2"

View File

@@ -37,6 +37,7 @@ fn main() {
.args(["--cflags", "gio-2.0"])
.output()
.expect("pkg-config not found");
assert!(gio_cflags.status.success(), "pkg-config --cflags gio-2.0 failed");
let gio_cflags_str = String::from_utf8(gio_cflags.stdout).unwrap();
let mut build = cc::Build::new();

View File

@@ -14,6 +14,9 @@ extern "C" fn handle_sigterm(_: libc::c_int) {
fn main() {
unsafe {
// SAFETY: handle_sigterm only stores to an AtomicBool — async-signal-safe.
// The *const () intermediate avoids a "direct cast to integer" warning because
// libc::sighandler_t is size_t on Linux.
libc::signal(libc::SIGTERM, handle_sigterm as *const () as libc::sighandler_t);
}
@@ -32,17 +35,20 @@ fn main() {
return;
};
let volume_state = ahfail_ui::volume::save_and_set_max();
let display = gdk::Display::default().expect("[ahfail-display] No display");
let monitor = display
.primary_monitor()
.or_else(|| display.monitor(0))
.expect("[ahfail-display] No monitor");
let Some(display) = gdk::Display::default() else {
eprintln!("[ahfail-display] No display");
return;
};
let Some(monitor) = display.primary_monitor().or_else(|| display.monitor(0)) else {
eprintln!("[ahfail-display] No monitor");
return;
};
let geom = monitor.geometry();
let screen_w = geom.width();
let screen_h = geom.height();
// On X11, WindowType::Popup creates an unmanaged override-redirect window (desired).
// On Wayland, GTK3 falls back to a normal xdg_toplevel; the compositor controls stacking.
let window = gtk::Window::new(gtk::WindowType::Popup);
window.set_decorated(false);
window.set_keep_above(true);
@@ -62,6 +68,9 @@ fn main() {
std::thread::spawn(|| ahfail_ui::update::check_for_update(ahfail_ui::VERSION));
// All setup succeeded — acquire volume lock now so early-exit paths above don't leave it held.
let volume_state = ahfail_ui::volume::save_and_set_max();
glib::timeout_add_seconds(FAILSAFE_MINUTES * 60, || {
gtk::main_quit();
glib::Continue(false)