mirror of
https://gitlab.com/asus-linux/asusctl.git
synced 2026-02-06 00:15:04 +01:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 7ae0f896cf | |||
| fb0374512d | |||
| 14f031ad34 |
@@ -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).
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
## [v4.6.2]
|
||||||
|
- Fix rog-control-center not reopening if `startup_in_background` is set
|
||||||
|
|
||||||
## [v4.6.1]
|
## [v4.6.1]
|
||||||
### Added
|
### Added
|
||||||
- Support for G733Z LED modes
|
- Support for G733Z LED modes
|
||||||
|
|||||||
Generated
+12
-12
@@ -175,7 +175,7 @@ checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "asusctl"
|
name = "asusctl"
|
||||||
version = "4.6.1"
|
version = "4.6.2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cargo-husky",
|
"cargo-husky",
|
||||||
"daemon",
|
"daemon",
|
||||||
@@ -677,7 +677,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "config-traits"
|
name = "config-traits"
|
||||||
version = "4.6.1"
|
version = "4.6.2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cargo-husky",
|
"cargo-husky",
|
||||||
"log",
|
"log",
|
||||||
@@ -768,7 +768,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "daemon"
|
name = "daemon"
|
||||||
version = "4.6.1"
|
version = "4.6.2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"cargo-husky",
|
"cargo-husky",
|
||||||
@@ -792,7 +792,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "daemon-user"
|
name = "daemon-user"
|
||||||
version = "4.6.1"
|
version = "4.6.2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cargo-husky",
|
"cargo-husky",
|
||||||
"config-traits",
|
"config-traits",
|
||||||
@@ -2547,7 +2547,7 @@ checksum = "a5996294f19bd3aae0453a862ad728f60e6600695733dd5df01da90c54363a3c"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rog-control-center"
|
name = "rog-control-center"
|
||||||
version = "4.6.1"
|
version = "4.6.2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cargo-husky",
|
"cargo-husky",
|
||||||
"daemon",
|
"daemon",
|
||||||
@@ -2580,7 +2580,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rog_anime"
|
name = "rog_anime"
|
||||||
version = "4.6.1"
|
version = "4.6.2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cargo-husky",
|
"cargo-husky",
|
||||||
"gif",
|
"gif",
|
||||||
@@ -2597,7 +2597,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rog_aura"
|
name = "rog_aura"
|
||||||
version = "4.6.1"
|
version = "4.6.2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cargo-husky",
|
"cargo-husky",
|
||||||
"log",
|
"log",
|
||||||
@@ -2610,7 +2610,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rog_dbus"
|
name = "rog_dbus"
|
||||||
version = "4.6.1"
|
version = "4.6.2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cargo-husky",
|
"cargo-husky",
|
||||||
"rog_anime",
|
"rog_anime",
|
||||||
@@ -2622,7 +2622,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rog_platform"
|
name = "rog_platform"
|
||||||
version = "4.6.1"
|
version = "4.6.2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cargo-husky",
|
"cargo-husky",
|
||||||
"concat-idents",
|
"concat-idents",
|
||||||
@@ -2639,7 +2639,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rog_profiles"
|
name = "rog_profiles"
|
||||||
version = "4.6.1"
|
version = "4.6.2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cargo-husky",
|
"cargo-husky",
|
||||||
"serde",
|
"serde",
|
||||||
@@ -2958,8 +2958,8 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "supergfxctl"
|
name = "supergfxctl"
|
||||||
version = "5.1.1-RC1"
|
version = "5.1.1"
|
||||||
source = "git+https://gitlab.com/asus-linux/supergfxctl.git#293a0d6f037d8d98353660a1b196a5b46ba33962"
|
source = "git+https://gitlab.com/asus-linux/supergfxctl.git#47cb9a2138c28a4484919131ec94d7103e0f1447"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"log",
|
"log",
|
||||||
"logind-zbus",
|
"logind-zbus",
|
||||||
|
|||||||
+1
-1
@@ -2,7 +2,7 @@
|
|||||||
members = ["asusctl", "config-traits", "daemon", "daemon-user", "rog-platform", "rog-dbus", "rog-anime", "rog-aura", "rog-profiles", "rog-control-center"]
|
members = ["asusctl", "config-traits", "daemon", "daemon-user", "rog-platform", "rog-dbus", "rog-anime", "rog-aura", "rog-profiles", "rog-control-center"]
|
||||||
|
|
||||||
[workspace.package]
|
[workspace.package]
|
||||||
version = "4.6.1"
|
version = "4.6.2"
|
||||||
|
|
||||||
[workspace.dependencies]
|
[workspace.dependencies]
|
||||||
async-trait = "^0.1"
|
async-trait = "^0.1"
|
||||||
|
|||||||
@@ -114,14 +114,35 @@ impl CtrlKbdLed {
|
|||||||
LEDNode::None
|
LEDNode::None
|
||||||
};
|
};
|
||||||
|
|
||||||
let config_init = AuraConfig::create_default(led_prod, &supported_modes);
|
let mut config_init = AuraConfig::create_default(led_prod, &supported_modes);
|
||||||
let mut config = config_init.clone().load();
|
let mut config_loaded = config_init.clone().load();
|
||||||
// Do updates of supported modes if required
|
|
||||||
for mode in &config_init.builtins {
|
for mode in &mut config_init.builtins {
|
||||||
if !config.builtins.contains_key(mode.0) {
|
// update init values from loaded values if they exist
|
||||||
config.builtins.insert(*mode.0, mode.1.clone());
|
if let Some(loaded) = config_loaded.builtins.get(mode.0) {
|
||||||
|
*mode.1 = loaded.clone();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
config_loaded.builtins = config_init.builtins;
|
||||||
|
|
||||||
|
if let (Some(mut multizone_init), Some(multizone_loaded)) =
|
||||||
|
(config_init.multizone, config_loaded.multizone.as_mut())
|
||||||
|
{
|
||||||
|
for mode in multizone_init.iter_mut() {
|
||||||
|
// update init values from loaded values if they exist
|
||||||
|
if let Some(loaded) = multizone_loaded.get(mode.0) {
|
||||||
|
let mut new_set = Vec::new();
|
||||||
|
// only reuse a zone mode if the mode is supported
|
||||||
|
for mode in loaded {
|
||||||
|
if supported_modes.basic_modes.contains(&mode.mode) {
|
||||||
|
new_set.push(mode.clone());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*mode.1 = new_set;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*multizone_loaded = multizone_init;
|
||||||
|
}
|
||||||
|
|
||||||
let ctrl = CtrlKbdLed {
|
let ctrl = CtrlKbdLed {
|
||||||
led_prod,
|
led_prod,
|
||||||
@@ -130,7 +151,7 @@ impl CtrlKbdLed {
|
|||||||
supported_modes,
|
supported_modes,
|
||||||
flip_effect_write: false,
|
flip_effect_write: false,
|
||||||
per_key_mode_active: false,
|
per_key_mode_active: false,
|
||||||
config,
|
config: config_loaded,
|
||||||
};
|
};
|
||||||
Ok(ctrl)
|
Ok(ctrl)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,9 +6,9 @@ use std::sync::{Arc, Mutex};
|
|||||||
use std::thread;
|
use std::thread;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
|
||||||
use eframe::{IconData, NativeOptions};
|
use eframe::IconData;
|
||||||
use gumdrop::Options;
|
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::aura_detection::{LaptopLedData, LedSupportFile};
|
||||||
use rog_aura::layouts::KeyLayout;
|
use rog_aura::layouts::KeyLayout;
|
||||||
use rog_control_center::cli_options::CliStart;
|
use rog_control_center::cli_options::CliStart;
|
||||||
@@ -191,30 +191,45 @@ fn main() -> Result<()> {
|
|||||||
|
|
||||||
init_tray(supported, states.clone());
|
init_tray(supported, states.clone());
|
||||||
|
|
||||||
|
let mut bg_check_spawned = false;
|
||||||
loop {
|
loop {
|
||||||
if !running_in_bg.load(Ordering::Acquire) {
|
if !running_in_bg.load(Ordering::Relaxed) {
|
||||||
// blocks until window is closed
|
// 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
|
if !config.run_in_background || cli_parsed.board_name.is_some() || cli_parsed.layout_viewing
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if config.run_in_background && !running_in_bg.load(Ordering::Acquire) {
|
if config.run_in_background && running_in_bg.load(Ordering::Acquire) && !bg_check_spawned {
|
||||||
running_in_bg.store(true, Ordering::SeqCst);
|
|
||||||
|
|
||||||
let running_in_bg = running_in_bg.clone();
|
let running_in_bg = running_in_bg.clone();
|
||||||
thread::spawn(move || {
|
thread::spawn(move || {
|
||||||
let mut buf = [0u8; 4];
|
let mut buf = [0u8; 4];
|
||||||
// blocks until it is read, typically the read will happen after a second
|
// 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)
|
// 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 {
|
loop {
|
||||||
running_in_bg.store(false, Ordering::SeqCst);
|
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
|
// Prevent hogging CPU
|
||||||
thread::sleep(Duration::from_millis(500));
|
thread::sleep(Duration::from_millis(500));
|
||||||
@@ -248,17 +263,6 @@ fn setup_page_state_and_notifs(
|
|||||||
Ok(page_states)
|
Ok(page_states)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn start_app(states: Arc<Mutex<SystemState>>, 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.
|
/// Bah.. the icon dosn't work on wayland anyway, but we'll leave it in for now.
|
||||||
fn load_icon() -> IconData {
|
fn load_icon() -> IconData {
|
||||||
let path = PathBuf::from(APP_ICON_PATH);
|
let path = PathBuf::from(APP_ICON_PATH);
|
||||||
|
|||||||
@@ -216,6 +216,7 @@ impl ROGTray {
|
|||||||
if let Ok(mut ipc) = get_ipc_file().map_err(|e| {
|
if let Ok(mut ipc) = get_ipc_file().map_err(|e| {
|
||||||
error!("ROGTray: get_ipc_file: {}", e);
|
error!("ROGTray: get_ipc_file: {}", e);
|
||||||
}) {
|
}) {
|
||||||
|
debug!("Tray told app to show self");
|
||||||
ipc.write_all(&[SHOW_GUI]).ok();
|
ipc.write_all(&[SHOW_GUI]).ok();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user