From 8db783d9b4701e1e60a79f5b0219311f2a368c92 Mon Sep 17 00:00:00 2001 From: "Luke D. Jones" Date: Tue, 25 Apr 2023 13:56:00 +1200 Subject: [PATCH] Better handling of supergfx version check, aura config updates --- CHANGELOG.md | 2 + Cargo.lock | 208 +++++++++++------------------ Cargo.toml | 2 + daemon/src/ctrl_aura/config.rs | 5 +- daemon/src/ctrl_aura/controller.rs | 10 +- rog-control-center/Cargo.toml | 6 +- rog-control-center/src/main.rs | 3 +- rog-control-center/src/tray.rs | 68 +++++++--- 8 files changed, 146 insertions(+), 158 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ba94313c..10727aff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - rog-control-center dark/light mode persistency - Adjustments to keyboard detection - Better support of using supergfxctl when available (tray icon and menu) +- Check supergfx version before enabling use in tray +- Update allowed Aura modes on asusd restart if changed ## [v4.6.0] ### Added diff --git a/Cargo.lock b/Cargo.lock index 1fa9bbdd..33ef9a80 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "ab_glyph" -version = "0.2.21" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5110f1c78cf582855d895ecd0746b653db010cec6d9f5575293f27934d980a39" +checksum = "fe21446ad43aa56417a767f3e2f3d7c4ca522904de1dd640529a76e9c5c3b33c" dependencies = [ "ab_glyph_rasterizer", "owned_ttf_parser", @@ -106,9 +106,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.0.1" +version = "0.7.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04" +checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" dependencies = [ "memchr", ] @@ -358,9 +358,9 @@ checksum = "1181e1e0d1fce796a03db1ae795d67167da795f9cf4a39c37589e85ef57f26d3" [[package]] name = "atomic_refcell" -version = "0.1.10" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79d6dc922a2792b006573f60b2648076355daeae5ce9cb59507e5908c9625d31" +checksum = "857253367827bd9d0fd973f0ef15506a96e79e41b0ad7aa691203a4e3214f6c8" [[package]] name = "atspi" @@ -484,9 +484,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.12.1" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b1ce199063694f33ffb7dd4e0ee620741495c32833cde5aa08f02a0bf96f0c8" +checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" [[package]] name = "bytemuck" @@ -589,12 +589,11 @@ dependencies = [ [[package]] name = "cfg-expr" -version = "0.15.1" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8790cf1286da485c72cf5fc7aeba308438800036ec67d89425924c4807268c9" +checksum = "a35b255461940a32985c627ce82900867c61db1659764d3675ea81963f72a4c6" dependencies = [ "smallvec", - "target-lexicon", ] [[package]] @@ -639,37 +638,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "cocoa" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a" -dependencies = [ - "bitflags", - "block", - "cocoa-foundation", - "core-foundation", - "core-graphics", - "foreign-types", - "libc", - "objc", -] - -[[package]] -name = "cocoa-foundation" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "931d3837c286f56e3c58423ce4eba12d08db2374461a785c86f672b08b5650d6" -dependencies = [ - "bitflags", - "block", - "core-foundation", - "core-graphics-types", - "foreign-types", - "libc", - "objc", -] - [[package]] name = "color_quant" version = "1.1.0" @@ -730,9 +698,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.4" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" +checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" [[package]] name = "core-graphics" @@ -761,9 +729,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.7" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58" +checksum = "280a9f2d8b3a38871a3c8a46fb80db65e5e5ed97da80c4d08bf27fb63e35e181" dependencies = [ "libc", ] @@ -926,7 +894,7 @@ checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" [[package]] name = "ecolor" version = "0.21.0" -source = "git+https://github.com/emilk/egui#92c7053a148ae0edac3efb1d990f25b54a2ec3bc" +source = "git+https://github.com/emilk/egui?rev=d486c76a9f146c12321b2a3fd0cedfe732e5783d#d486c76a9f146c12321b2a3fd0cedfe732e5783d" dependencies = [ "bytemuck", ] @@ -934,34 +902,30 @@ dependencies = [ [[package]] name = "eframe" version = "0.21.3" -source = "git+https://github.com/emilk/egui#92c7053a148ae0edac3efb1d990f25b54a2ec3bc" +source = "git+https://github.com/emilk/egui?rev=d486c76a9f146c12321b2a3fd0cedfe732e5783d#d486c76a9f146c12321b2a3fd0cedfe732e5783d" dependencies = [ "bytemuck", - "cocoa", "egui", "egui-winit", "egui_glow", "glow", "glutin", "glutin-winit", - "image", "js-sys", "log", - "objc", "percent-encoding", "raw-window-handle", "thiserror", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "winapi", "winit", ] [[package]] name = "egui" version = "0.21.0" -source = "git+https://github.com/emilk/egui#92c7053a148ae0edac3efb1d990f25b54a2ec3bc" +source = "git+https://github.com/emilk/egui?rev=d486c76a9f146c12321b2a3fd0cedfe732e5783d#d486c76a9f146c12321b2a3fd0cedfe732e5783d" dependencies = [ "accesskit", "ahash", @@ -973,14 +937,13 @@ dependencies = [ [[package]] name = "egui-winit" version = "0.21.1" -source = "git+https://github.com/emilk/egui#92c7053a148ae0edac3efb1d990f25b54a2ec3bc" +source = "git+https://github.com/emilk/egui?rev=d486c76a9f146c12321b2a3fd0cedfe732e5783d#d486c76a9f146c12321b2a3fd0cedfe732e5783d" dependencies = [ "accesskit_winit", "arboard", "egui", "instant", "log", - "raw-window-handle", "smithay-clipboard", "webbrowser", "winit", @@ -989,7 +952,7 @@ dependencies = [ [[package]] name = "egui_glow" version = "0.21.0" -source = "git+https://github.com/emilk/egui#92c7053a148ae0edac3efb1d990f25b54a2ec3bc" +source = "git+https://github.com/emilk/egui?rev=d486c76a9f146c12321b2a3fd0cedfe732e5783d#d486c76a9f146c12321b2a3fd0cedfe732e5783d" dependencies = [ "bytemuck", "egui", @@ -1000,10 +963,16 @@ dependencies = [ "web-sys", ] +[[package]] +name = "either" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" + [[package]] name = "emath" version = "0.21.0" -source = "git+https://github.com/emilk/egui#92c7053a148ae0edac3efb1d990f25b54a2ec3bc" +source = "git+https://github.com/emilk/egui?rev=d486c76a9f146c12321b2a3fd0cedfe732e5783d#d486c76a9f146c12321b2a3fd0cedfe732e5783d" dependencies = [ "bytemuck", ] @@ -1088,7 +1057,7 @@ dependencies = [ [[package]] name = "epaint" version = "0.21.0" -source = "git+https://github.com/emilk/egui#92c7053a148ae0edac3efb1d990f25b54a2ec3bc" +source = "git+https://github.com/emilk/egui?rev=d486c76a9f146c12321b2a3fd0cedfe732e5783d#d486c76a9f146c12321b2a3fd0cedfe732e5783d" dependencies = [ "ab_glyph", "ahash", @@ -1705,20 +1674,6 @@ dependencies = [ "unicode-normalization", ] -[[package]] -name = "image" -version = "0.24.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "527909aa81e20ac3a44803521443a765550f09b5130c2c2fa1ea59c2f8f50a3a" -dependencies = [ - "bytemuck", - "byteorder", - "color_quant", - "num-rational", - "num-traits", - "png", -] - [[package]] name = "indexmap" version = "1.9.3" @@ -1786,6 +1741,15 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.6" @@ -1876,9 +1840,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.142" +version = "0.2.141" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a987beff54b60ffa6d51982e1aa1146bc42f19bd26be28b0586f252fccf5317" +checksum = "3304a64d199bb964be99741b7a14d26972741915b3649639149b2479bb46f4b5" [[package]] name = "libloading" @@ -1914,9 +1878,9 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.3.4" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36eb31c1778188ae1e64398743890d0877fef36d11521ac60406b42016e8c2cf" +checksum = "3f508063cc7bb32987c71511216bd5a32be15bccb6a80b52df8b9d7f01fc3aa2" [[package]] name = "lock_api" @@ -2159,27 +2123,6 @@ dependencies = [ "zbus", ] -[[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - [[package]] name = "num-traits" version = "0.2.15" @@ -2254,9 +2197,9 @@ checksum = "df3b9834c1e95694a05a828b59f55fa2afec6288359cda67146126b3f90a55d7" [[package]] name = "objc2" -version = "0.3.0-beta.3.patch-leaks.3" +version = "0.3.0-beta.3.patch-leaks.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e01640f9f2cb1220bbe80325e179e532cb3379ebcd1bf2279d703c19fe3a468" +checksum = "e7d9bb2ee6b71d02b1b3554ed600d267ee9a2796acc9fa43fb7748e13fe072dd" dependencies = [ "block2", "objc-sys", @@ -2289,9 +2232,9 @@ checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" [[package]] name = "orbclient" -version = "0.3.44" +version = "0.3.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e9829e16c5e112e94efb5e2ad1fe17f8c1c99bb0fcdc8c65c44e935d904767d" +checksum = "974465c5e83cf9df05c1e4137b271d29035c902e39e5ad4c1939837e22160af8" dependencies = [ "cfg-if", "redox_syscall 0.2.16", @@ -2311,9 +2254,9 @@ dependencies = [ [[package]] name = "owned_ttf_parser" -version = "0.19.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "706de7e2214113d63a8238d1910463cfce781129a6f263d13fdb09ff64355ba4" +checksum = "e25e9fb15717794fae58ab55c26e044103aad13186fbb625893f9a3bbcc24228" dependencies = [ "ttf-parser", ] @@ -2439,9 +2382,9 @@ dependencies = [ [[package]] name = "polling" -version = "2.8.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" +checksum = "4be1c66a6add46bff50935c313dae30a5030cf8385c5206e8a95e9e9def974aa" dependencies = [ "autocfg", "bitflags", @@ -2587,9 +2530,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.8.1" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af83e617f331cc6ae2da5443c602dfa5af81e517212d9d611a5b3ba1777b5370" +checksum = "8b1f693b24f6ac912f4893ef08244d70b6067480d2f1a46e950c9691e6749d1d" dependencies = [ "aho-corasick", "memchr", @@ -2598,9 +2541,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.7.1" +version = "0.6.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5996294f19bd3aae0453a862ad728f60e6600695733dd5df01da90c54363a3c" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "rog-control-center" @@ -2631,6 +2574,7 @@ dependencies = [ "tempfile", "tokio", "toml 0.5.11", + "versions", "zbus", ] @@ -2742,9 +2686,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.37.14" +version = "0.37.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b864d3c18a5785a05953adeed93e2dca37ed30f18e69bba9f30079d51f363f" +checksum = "722529a737f5a942fdbac3a46cee213053196737c5eaa3386d52e85b786f2659" dependencies = [ "bitflags", "errno", @@ -3014,8 +2958,8 @@ dependencies = [ [[package]] name = "supergfxctl" -version = "5.1.0" -source = "git+https://gitlab.com/asus-linux/supergfxctl.git#d020d26c0344477e86ce7ed5fe8ed2dfbdac0f9f" +version = "5.1.0-RC5" +source = "git+https://gitlab.com/asus-linux/supergfxctl.git#92d82977b47c54d868aa92e54a22d10a2e858598" dependencies = [ "log", "logind-zbus", @@ -3062,9 +3006,9 @@ dependencies = [ [[package]] name = "system-deps" -version = "6.0.5" +version = "6.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0fe581ad25d11420b873cf9aedaca0419c2b411487b134d4d21065f3d092055" +checksum = "555fc8147af6256f3931a36bb83ad0023240ce9cf2b319dec8236fd1f220b05f" dependencies = [ "cfg-expr", "heck 0.4.1", @@ -3083,12 +3027,6 @@ dependencies = [ "zbus", ] -[[package]] -name = "target-lexicon" -version = "0.12.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd1ba337640d60c3e96bc6f0638a939b9c9a7f2c316a1598c279828b3d1dc8c5" - [[package]] name = "tauri-winrt-notification" version = "0.1.0" @@ -3160,9 +3098,9 @@ checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" [[package]] name = "tiny-skia" -version = "0.8.4" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df8493a203431061e901613751931f047d1971337153f96d0e5e363d6dbf6a67" +checksum = "bfef3412c6975196fdfac41ef232f910be2bb37b9dd3313a49a1a6bc815a5bdb" dependencies = [ "arrayref", "arrayvec", @@ -3174,9 +3112,9 @@ dependencies = [ [[package]] name = "tiny-skia-path" -version = "0.8.4" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adbfb5d3f3dd57a0e11d12f4f13d4ebbbc1b5c15b7ab0a156d030b21da5f677c" +checksum = "a4b5edac058fc98f51c935daea4d805b695b38e2f151241cad125ade2a2ac20d" dependencies = [ "arrayref", "bytemuck", @@ -3291,13 +3229,13 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.24" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74" +checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 1.0.109", ] [[package]] @@ -3311,9 +3249,9 @@ dependencies = [ [[package]] name = "ttf-parser" -version = "0.19.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44dcf002ae3b32cd25400d6df128c5babec3927cd1eb7ce813cfff20eb6c3746" +checksum = "0609f771ad9c6155384897e1df4d948e692667cc0588548b68eb44d052b27633" [[package]] name = "typenum" @@ -3435,6 +3373,16 @@ version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +[[package]] +name = "versions" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee97e1d97bd593fb513912a07691b742361b3dd64ad56f2c694ea2dbfe0665d3" +dependencies = [ + "itertools", + "nom", +] + [[package]] name = "waker-fn" version = "1.1.0" diff --git a/Cargo.toml b/Cargo.toml index 6f5efee8..62783844 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -35,6 +35,8 @@ pix = "^0.13" tinybmp = "^0.4.0" gif = "^0.12.0" +versions = "4.1" + notify-rust = { git = "https://github.com/flukejones/notify-rust.git", default-features = false, features = ["z"] } [profile.release] diff --git a/daemon/src/ctrl_aura/config.rs b/daemon/src/ctrl_aura/config.rs index fcbfeaa6..bb9bc843 100644 --- a/daemon/src/ctrl_aura/config.rs +++ b/daemon/src/ctrl_aura/config.rs @@ -111,7 +111,7 @@ impl From<&AuraPowerConfig> for AuraPowerDev { } } -#[derive(Deserialize, Serialize, Debug)] +#[derive(Deserialize, Serialize, Debug, Clone)] // #[serde(default)] pub struct AuraConfig { pub brightness: LedBrightness, @@ -124,7 +124,8 @@ pub struct AuraConfig { impl StdConfig for AuraConfig { fn new() -> Self { - Self::create_default(AuraDevice::X19b6, &LaptopLedData::get_data()) + // Self::create_default(AuraDevice::X19b6, &LaptopLedData::get_data()) + panic!("AuraConfig::new() should not be used, use AuraConfig::create_default() instead"); } fn config_dir() -> std::path::PathBuf { diff --git a/daemon/src/ctrl_aura/controller.rs b/daemon/src/ctrl_aura/controller.rs index a5e40353..9cda8be9 100644 --- a/daemon/src/ctrl_aura/controller.rs +++ b/daemon/src/ctrl_aura/controller.rs @@ -114,7 +114,15 @@ impl CtrlKbdLed { LEDNode::None }; - let config = AuraConfig::create_default(led_prod, &supported_modes).load(); + let config_init = AuraConfig::create_default(led_prod, &supported_modes); + let mut config = config_init.clone().load(); + // Do updates of supported modes if required + for mode in &config_init.builtins { + if !config.builtins.contains_key(mode.0) { + config.builtins.insert(*mode.0, mode.1.clone()); + } + } + let ctrl = CtrlKbdLed { led_prod, led_node, // on TUF this is the same as rgb_led / kd_brightness diff --git a/rog-control-center/Cargo.toml b/rog-control-center/Cargo.toml index f3ccdc1a..a26095f8 100644 --- a/rog-control-center/Cargo.toml +++ b/rog-control-center/Cargo.toml @@ -10,8 +10,8 @@ edition = "2021" mocking = [] [dependencies] -egui = { git = "https://github.com/emilk/egui", commit = "d486c76a9f146c12321b2a3fd0cedfe732e5783d"} -eframe = { git = "https://github.com/emilk/egui", commit = "d486c76a9f146c12321b2a3fd0cedfe732e5783d"} +egui = { git = "https://github.com/emilk/egui", rev = "d486c76a9f146c12321b2a3fd0cedfe732e5783d"} +eframe = { git = "https://github.com/emilk/egui", rev = "d486c76a9f146c12321b2a3fd0cedfe732e5783d"} libappindicator = "0.7" # Tray icon gtk = "0.15.5" @@ -39,6 +39,8 @@ notify-rust.workspace = true png_pong.workspace = true +versions.workspace = true + nix = "^0.26.1" tempfile = "3.3.0" diff --git a/rog-control-center/src/main.rs b/rog-control-center/src/main.rs index 7301915a..eea7ea93 100644 --- a/rog-control-center/src/main.rs +++ b/rog-control-center/src/main.rs @@ -8,7 +8,7 @@ use std::time::Duration; use eframe::{IconData, NativeOptions}; use gumdrop::Options; -use log::{error, info, warn}; +use log::{error, info, warn, LevelFilter}; use rog_aura::aura_detection::{LaptopLedData, LedSupportFile}; use rog_aura::layouts::KeyLayout; use rog_control_center::cli_options::CliStart; @@ -48,6 +48,7 @@ fn main() -> Result<()> { let mut logger = env_logger::Builder::new(); logger + .filter_level(LevelFilter::Warn) .parse_default_env() .target(env_logger::Target::Stdout) .format(|buf, record| writeln!(buf, "{}: {}", record.level(), record.args())) diff --git a/rog-control-center/src/tray.rs b/rog-control-center/src/tray.rs index d1826ddf..774216d0 100644 --- a/rog-control-center/src/tray.rs +++ b/rog-control-center/src/tray.rs @@ -9,12 +9,14 @@ use std::time::Duration; use gtk::gio::Icon; use gtk::prelude::*; use libappindicator::{AppIndicator, AppIndicatorStatus}; -use log::{debug, error, info, trace}; +use log::{debug, error, info, trace, warn}; use rog_dbus::zbus_platform::RogBiosProxyBlocking; use rog_platform::platform::GpuMode; use rog_platform::supported::SupportedFunctions; +use supergfxctl::actions::UserActionRequired as GfxUserActionRequired; use supergfxctl::pci_device::{GfxMode, GfxPower}; use supergfxctl::zbus_proxy::DaemonProxyBlocking as GfxProxyBlocking; +use versions::Versioning; use crate::error::Result; use crate::system_state::SystemState; @@ -79,6 +81,7 @@ pub struct ROGTray { icon: &'static str, bios_proxy: RogBiosProxyBlocking<'static>, gfx_proxy_is_active: bool, + gfx_action: Arc>, gfx_proxy: GfxProxyBlocking<'static>, } @@ -103,6 +106,7 @@ impl ROGTray { e })?, gfx_proxy_is_active: gfx_proxy.mode().is_ok(), + gfx_action: Arc::new(Mutex::new(GfxUserActionRequired::Nothing)), gfx_proxy, }; Ok(rog_tray) @@ -249,30 +253,33 @@ impl ROGTray { } let gfx_dbus = self.gfx_proxy.clone(); - + let gfx_action = self.gfx_action.clone(); let mut gpu_menu = RadioGroup::new("Integrated", move |_| { if current_mode != GfxMode::Integrated { - gfx_dbus - .set_mode(&GfxMode::Integrated) - .map_err(|e| { - error!("ROGTray: srt_mode: {e}"); - e - }) - .ok(); + if let Ok(res) = gfx_dbus.set_mode(&GfxMode::Integrated).map_err(|e| { + error!("ROGTray: srt_mode: {e}"); + e + }) { + if let Ok(mut lock) = gfx_action.lock() { + *lock = res; + } + } } }); let mut func = |menu_mode: GfxMode| { let gfx_dbus = self.gfx_proxy.clone(); + let gfx_action = self.gfx_action.clone(); gpu_menu.add(&format!("{menu_mode}"), move |_| { if current_mode != menu_mode { - gfx_dbus - .set_mode(&menu_mode) - .map_err(|e| { - error!("ROGTray: set_mode: {e}"); - e - }) - .ok(); + if let Ok(res) = gfx_dbus.set_mode(&menu_mode).map_err(|e| { + error!("ROGTray: set_mode: {e}"); + e + }) { + if let Ok(mut lock) = gfx_action.lock() { + *lock = res; + } + } } }); }; @@ -284,16 +291,18 @@ impl ROGTray { func(*item); } - let mut _reboot_required = false; - - let reboot_required = if _reboot_required { - "(Reboot required)" + let action_required = if let Ok(lock) = self.gfx_action.lock() { + if matches!(*lock, GfxUserActionRequired::Nothing) { + "" + } else { + <&str>::from(*lock) + } } else { "" }; self.add_radio_sub_menu( - &format!("GPU Mode: {current_mode} {reboot_required}"), + &format!("GPU Mode: {current_mode} {action_required}"), ¤t_mode.to_string(), &gpu_menu, ); @@ -423,7 +432,22 @@ pub fn init_tray( }; let supported_gfx = if tray.gfx_proxy_is_active { - tray.gfx_proxy.supported().unwrap() + if let Ok(version) = tray.gfx_proxy.version() { + if let Some(version) = Versioning::new(&version) { + let curr_gfx = Versioning::new("5.0.3-RC4").unwrap(); + warn!("supergfxd version = {version}"); + if version < curr_gfx { + // Don't allow mode changing if too old a version + warn!("supergfxd found but is too old to use"); + tray.gfx_proxy_is_active = false; + } + } + } + if tray.gfx_proxy_is_active { + tray.gfx_proxy.supported().unwrap() + } else { + Default::default() + } } else { Default::default() };