From ba5fb65b44302d2aae5d969917d9f3d7b04c8d1e Mon Sep 17 00:00:00 2001 From: Lysander Treumann Date: Tue, 21 Apr 2026 17:04:55 +0200 Subject: [PATCH] Changes the PageInner.size field to have no explicit default. It is only initialized (not None) when PageInner.panel_config is initialized. This implementation fails faster and more verbose, when program is in an unintended state. --- cosmic-settings/src/pages/desktop/panel/inner.rs | 14 +++++++------- cosmic-settings/src/pages/desktop/panel/mod.rs | 2 ++ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/cosmic-settings/src/pages/desktop/panel/inner.rs b/cosmic-settings/src/pages/desktop/panel/inner.rs index 9974e54..d6b7574 100644 --- a/cosmic-settings/src/pages/desktop/panel/inner.rs +++ b/cosmic-settings/src/pages/desktop/panel/inner.rs @@ -22,9 +22,9 @@ use crate::pages::desktop::appearance::Roundness; pub struct PageInner { pub(crate) config_helper: Option, pub(crate) panel_config: Option, + pub size: Option, pub opacity: f32, pub opacity_changing: bool, - pub size: PanelSize, pub outputs: Vec, pub anchors: Vec, pub backgrounds: Vec, @@ -40,9 +40,9 @@ impl Default for PageInner { Self { config_helper: Option::default(), panel_config: Option::default(), + size: Option::default(), opacity: 0.0, opacity_changing: false, - size: PanelSize::M, outputs: vec![fl!("all-displays")], anchors: vec![ Anchor(PanelAnchor::Left).to_string(), @@ -209,7 +209,7 @@ pub(crate) fn style< text::body(fl!("small")).into(), slider( 0..=4, - match inner.size { + match inner.size.as_ref().expect("inner.size is None even though inner.panel_config is Some") { PanelSize::XS => 0, PanelSize::S => 1, PanelSize::M => 2, @@ -504,7 +504,7 @@ impl PageInner { if let Err(err) = default.write_entry(config) { tracing::error!(?err, "Error resetting panel config."); } - self.size.clone_from(&default.size); + self.size = Some(default.size.clone()); self.system_default = Some(default.clone()); self.panel_config.clone_from(&self.system_default); } else { @@ -603,10 +603,10 @@ impl PageInner { _ = panel_config.set_border_radius(helper, new_radius).unwrap(); } Message::PanelSize(size) => { - self.size = size; + self.size = Some(size); } Message::PanelSizeCommit => { - _ = panel_config.set_size(helper, self.size.clone()); + _ = panel_config.set_size(helper, self.size.as_ref().expect("PageInner.size is None even though it should be Some").clone()); // Reset any size overrides the user might have set _ = panel_config.set_size_center(helper, None); _ = panel_config.set_size_wings(helper, None); @@ -669,7 +669,7 @@ impl PageInner { } } Message::PanelConfig(c) => { - self.size = c.size.clone(); + self.size = Some(c.size.clone()); self.panel_config = Some(*c); return Task::none(); } diff --git a/cosmic-settings/src/pages/desktop/panel/mod.rs b/cosmic-settings/src/pages/desktop/panel/mod.rs index 4f98e64..7748618 100644 --- a/cosmic-settings/src/pages/desktop/panel/mod.rs +++ b/cosmic-settings/src/pages/desktop/panel/mod.rs @@ -79,6 +79,7 @@ impl Default for Page { // If the config is not present, it will be created with the default values and the name will not match (panel_config.name == "Panel").then_some(panel_config) }); + let size = panel_config.as_ref().map(|c| c.size.clone()); let system_default = cosmic::cosmic_config::Config::system( &format!("{}.Panel", cosmic_panel_config::NAME), CosmicPanelConfig::VERSION, @@ -98,6 +99,7 @@ impl Default for Page { inner: PageInner { config_helper, panel_config, + size, container_config, outputs_map: HashMap::new(), system_default,