From fb0374512d7a769a22cd606b00fdba41cafceeb1 Mon Sep 17 00:00:00 2001 From: "Luke D. Jones" Date: Thu, 27 Apr 2023 16:01:07 +1200 Subject: [PATCH] Fix rog-control-center not reopening if is set --- CHANGELOG.md | 3 +++ Cargo.lock | 20 +++++++-------- Cargo.toml | 2 +- rog-control-center/src/main.rs | 46 ++++++++++++++++++---------------- rog-control-center/src/tray.rs | 1 + 5 files changed, 40 insertions(+), 32 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f4feb758..1f7f1ea2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +## [v4.6.2] +- Fix rog-control-center not reopening if `startup_in_background` is set + ## [v4.6.1] ### Added - Support for G733Z LED modes diff --git a/Cargo.lock b/Cargo.lock index e71b8b89..df7ce753 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -175,7 +175,7 @@ checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" [[package]] name = "asusctl" -version = "4.6.1" +version = "4.6.2" dependencies = [ "cargo-husky", "daemon", @@ -677,7 +677,7 @@ dependencies = [ [[package]] name = "config-traits" -version = "4.6.1" +version = "4.6.2" dependencies = [ "cargo-husky", "log", @@ -768,7 +768,7 @@ dependencies = [ [[package]] name = "daemon" -version = "4.6.1" +version = "4.6.2" dependencies = [ "async-trait", "cargo-husky", @@ -792,7 +792,7 @@ dependencies = [ [[package]] name = "daemon-user" -version = "4.6.1" +version = "4.6.2" dependencies = [ "cargo-husky", "config-traits", @@ -2547,7 +2547,7 @@ checksum = "a5996294f19bd3aae0453a862ad728f60e6600695733dd5df01da90c54363a3c" [[package]] name = "rog-control-center" -version = "4.6.1" +version = "4.6.2" dependencies = [ "cargo-husky", "daemon", @@ -2580,7 +2580,7 @@ dependencies = [ [[package]] name = "rog_anime" -version = "4.6.1" +version = "4.6.2" dependencies = [ "cargo-husky", "gif", @@ -2597,7 +2597,7 @@ dependencies = [ [[package]] name = "rog_aura" -version = "4.6.1" +version = "4.6.2" dependencies = [ "cargo-husky", "log", @@ -2610,7 +2610,7 @@ dependencies = [ [[package]] name = "rog_dbus" -version = "4.6.1" +version = "4.6.2" dependencies = [ "cargo-husky", "rog_anime", @@ -2622,7 +2622,7 @@ dependencies = [ [[package]] name = "rog_platform" -version = "4.6.1" +version = "4.6.2" dependencies = [ "cargo-husky", "concat-idents", @@ -2639,7 +2639,7 @@ dependencies = [ [[package]] name = "rog_profiles" -version = "4.6.1" +version = "4.6.2" dependencies = [ "cargo-husky", "serde", diff --git a/Cargo.toml b/Cargo.toml index f1e7b515..cd9c9b21 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ members = ["asusctl", "config-traits", "daemon", "daemon-user", "rog-platform", "rog-dbus", "rog-anime", "rog-aura", "rog-profiles", "rog-control-center"] [workspace.package] -version = "4.6.1" +version = "4.6.2" [workspace.dependencies] async-trait = "^0.1" diff --git a/rog-control-center/src/main.rs b/rog-control-center/src/main.rs index eea7ea93..ec371c17 100644 --- a/rog-control-center/src/main.rs +++ b/rog-control-center/src/main.rs @@ -6,9 +6,9 @@ use std::sync::{Arc, Mutex}; use std::thread; use std::time::Duration; -use eframe::{IconData, NativeOptions}; +use eframe::IconData; use gumdrop::Options; -use log::{error, info, warn, LevelFilter}; +use log::{debug, error, info, warn, LevelFilter}; use rog_aura::aura_detection::{LaptopLedData, LedSupportFile}; use rog_aura::layouts::KeyLayout; use rog_control_center::cli_options::CliStart; @@ -191,30 +191,45 @@ fn main() -> Result<()> { init_tray(supported, states.clone()); + let mut bg_check_spawned = false; loop { - if !running_in_bg.load(Ordering::Acquire) { + if !running_in_bg.load(Ordering::Relaxed) { // blocks until window is closed - start_app(states.clone(), native_options.clone())?; + let states = states.clone(); + let mut ipc_file = get_ipc_file()?; + ipc_file.write_all(&[SHOWING_GUI])?; + eframe::run_native( + "ROG Control Center", + native_options.clone(), + Box::new(move |cc| { + Box::new(RogApp::new(Config::load().unwrap(), states, cc).unwrap()) + }), + )?; + + running_in_bg.store(true, Ordering::SeqCst); + bg_check_spawned = false; } - let config = Config::load()?; if !config.run_in_background || cli_parsed.board_name.is_some() || cli_parsed.layout_viewing { break; } - if config.run_in_background && !running_in_bg.load(Ordering::Acquire) { - running_in_bg.store(true, Ordering::SeqCst); - + if config.run_in_background && running_in_bg.load(Ordering::Acquire) && !bg_check_spawned { let running_in_bg = running_in_bg.clone(); thread::spawn(move || { let mut buf = [0u8; 4]; // blocks until it is read, typically the read will happen after a second // process writes to the IPC (so there is data to actually read) - if get_ipc_file().unwrap().read(&mut buf).is_ok() && buf[0] == SHOW_GUI { - running_in_bg.store(false, Ordering::SeqCst); + loop { + if get_ipc_file().unwrap().read(&mut buf).is_ok() && buf[0] == SHOW_GUI { + running_in_bg.store(false, Ordering::Release); + debug!("Wait thread got from tray {buf:#?}"); + break; + } } }); + bg_check_spawned = true; } // Prevent hogging CPU thread::sleep(Duration::from_millis(500)); @@ -248,17 +263,6 @@ fn setup_page_state_and_notifs( Ok(page_states) } -fn start_app(states: Arc>, native_options: NativeOptions) -> Result<()> { - let mut ipc_file = get_ipc_file()?; - ipc_file.write_all(&[SHOWING_GUI])?; - eframe::run_native( - "ROG Control Center", - native_options, - Box::new(move |cc| Box::new(RogApp::new(Config::load().unwrap(), states, cc).unwrap())), - )?; - Ok(()) -} - /// Bah.. the icon dosn't work on wayland anyway, but we'll leave it in for now. fn load_icon() -> IconData { let path = PathBuf::from(APP_ICON_PATH); diff --git a/rog-control-center/src/tray.rs b/rog-control-center/src/tray.rs index 1b9af2ec..0db24cc9 100644 --- a/rog-control-center/src/tray.rs +++ b/rog-control-center/src/tray.rs @@ -216,6 +216,7 @@ impl ROGTray { if let Ok(mut ipc) = get_ipc_file().map_err(|e| { error!("ROGTray: get_ipc_file: {}", e); }) { + debug!("Tray told app to show self"); ipc.write_all(&[SHOW_GUI]).ok(); } });