fix: defer volume lock to after setup, fix sighandler cast comment, check pkg-config status
This commit is contained in:
@@ -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"
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user