mirror of
https://gitlab.com/asus-linux/asusctl.git
synced 2026-02-06 00:15:04 +01:00
Merge branch 'feature/persistent-theme' into 'main'
Persistent dark / light mode See merge request asus-linux/asusctl!160
This commit is contained in:
@@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
### Changed
|
### Changed
|
||||||
- Adjustments to Anime system events thread
|
- Adjustments to Anime system events thread
|
||||||
- Add "sleep" animetion config options to anime config
|
- Add "sleep" animetion config options to anime config
|
||||||
|
- rog-control-center dark/light mode persisency
|
||||||
|
|
||||||
## [v4.6.0]
|
## [v4.6.0]
|
||||||
### Added
|
### Added
|
||||||
@@ -51,7 +52,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
## [v4.5.7]
|
## [v4.5.7]
|
||||||
### Changed
|
### Changed
|
||||||
- ROGCC: Don't notify user if changing to same mux mode
|
- ROGCC: Don't notify user if changing to same mux mode
|
||||||
-
|
-
|
||||||
|
|
||||||
## [v4.5.7]
|
## [v4.5.7]
|
||||||
### Changed
|
### Changed
|
||||||
@@ -616,4 +617,4 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
- Fix small deadlock with awaits
|
- Fix small deadlock with awaits
|
||||||
|
|
||||||
## [1.0.0]
|
## [1.0.0]
|
||||||
@@ -17,6 +17,7 @@ pub struct Config {
|
|||||||
pub ac_command: String,
|
pub ac_command: String,
|
||||||
pub bat_command: String,
|
pub bat_command: String,
|
||||||
pub enable_notifications: bool,
|
pub enable_notifications: bool,
|
||||||
|
pub dark_mode: bool,
|
||||||
// This field must be last
|
// This field must be last
|
||||||
pub enabled_notifications: EnabledNotifications,
|
pub enabled_notifications: EnabledNotifications,
|
||||||
}
|
}
|
||||||
@@ -27,6 +28,7 @@ impl Default for Config {
|
|||||||
run_in_background: true,
|
run_in_background: true,
|
||||||
startup_in_background: false,
|
startup_in_background: false,
|
||||||
enable_notifications: true,
|
enable_notifications: true,
|
||||||
|
dark_mode: true,
|
||||||
enabled_notifications: EnabledNotifications::default(),
|
enabled_notifications: EnabledNotifications::default(),
|
||||||
ac_command: String::new(),
|
ac_command: String::new(),
|
||||||
bat_command: String::new(),
|
bat_command: String::new(),
|
||||||
@@ -72,6 +74,9 @@ impl Config {
|
|||||||
} else if let Ok(data) = toml::from_str::<Config>(&buf) {
|
} else if let Ok(data) = toml::from_str::<Config>(&buf) {
|
||||||
info!("Loaded config file {path:?}");
|
info!("Loaded config file {path:?}");
|
||||||
return Ok(data);
|
return Ok(data);
|
||||||
|
} else if let Ok(data) = toml::from_str::<Config460>(&buf) {
|
||||||
|
info!("Loaded old v4.6.0 config file {path:?}");
|
||||||
|
return Ok(data.into());
|
||||||
} else if let Ok(data) = toml::from_str::<Config455>(&buf) {
|
} else if let Ok(data) = toml::from_str::<Config455>(&buf) {
|
||||||
info!("Loaded old v4.5.5 config file {path:?}");
|
info!("Loaded old v4.5.5 config file {path:?}");
|
||||||
return Ok(data.into());
|
return Ok(data.into());
|
||||||
@@ -124,8 +129,33 @@ impl From<Config455> for Config {
|
|||||||
startup_in_background: c.startup_in_background,
|
startup_in_background: c.startup_in_background,
|
||||||
enable_notifications: c.enable_notifications,
|
enable_notifications: c.enable_notifications,
|
||||||
enabled_notifications: c.enabled_notifications,
|
enabled_notifications: c.enabled_notifications,
|
||||||
|
dark_mode: true,
|
||||||
ac_command: String::new(),
|
ac_command: String::new(),
|
||||||
bat_command: String::new(),
|
bat_command: String::new(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Deserialize, Serialize)]
|
||||||
|
pub struct Config460 {
|
||||||
|
pub run_in_background: bool,
|
||||||
|
pub startup_in_background: bool,
|
||||||
|
pub ac_command: String,
|
||||||
|
pub bat_command: String,
|
||||||
|
pub enable_notifications: bool,
|
||||||
|
pub enabled_notifications: EnabledNotifications,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<Config460> for Config {
|
||||||
|
fn from(c: Config460) -> Self {
|
||||||
|
Self {
|
||||||
|
run_in_background: c.run_in_background,
|
||||||
|
startup_in_background: c.startup_in_background,
|
||||||
|
ac_command: c.ac_command,
|
||||||
|
bat_command: c.bat_command,
|
||||||
|
dark_mode: true,
|
||||||
|
enable_notifications: c.enable_notifications,
|
||||||
|
enabled_notifications: c.enabled_notifications,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ impl RogApp {
|
|||||||
// The top panel is often a good place for a menu bar:
|
// The top panel is often a good place for a menu bar:
|
||||||
egui::menu::bar(ui, |ui| {
|
egui::menu::bar(ui, |ui| {
|
||||||
ui.horizontal(|ui| {
|
ui.horizontal(|ui| {
|
||||||
egui::global_dark_light_mode_buttons(ui);
|
self.dark_light_mode_buttons(ui);
|
||||||
egui::warn_if_debug_build(ui);
|
egui::warn_if_debug_build(ui);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -45,4 +45,34 @@ impl RogApp {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn dark_light_mode_buttons(&mut self, ui: &mut egui::Ui) {
|
||||||
|
let load_from_cfg = self.config.dark_mode != ui.ctx().style().visuals.dark_mode;
|
||||||
|
|
||||||
|
if ui
|
||||||
|
.add(egui::SelectableLabel::new(
|
||||||
|
!self.config.dark_mode,
|
||||||
|
"☀ Light",
|
||||||
|
))
|
||||||
|
.clicked()
|
||||||
|
|| (load_from_cfg && !self.config.dark_mode)
|
||||||
|
{
|
||||||
|
ui.ctx().set_visuals(egui::Visuals::light());
|
||||||
|
}
|
||||||
|
if ui
|
||||||
|
.add(egui::SelectableLabel::new(self.config.dark_mode, "🌙 Dark"))
|
||||||
|
.clicked()
|
||||||
|
|| (load_from_cfg && self.config.dark_mode)
|
||||||
|
{
|
||||||
|
ui.ctx().set_visuals(egui::Visuals::dark());
|
||||||
|
}
|
||||||
|
|
||||||
|
let applied_dark_mode = ui.ctx().style().visuals.dark_mode;
|
||||||
|
|
||||||
|
if self.config.dark_mode != applied_dark_mode {
|
||||||
|
self.config.dark_mode = applied_dark_mode;
|
||||||
|
let tmp = self.config.enabled_notifications.clone();
|
||||||
|
self.config.save(&tmp).ok();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user