From 95a82c0d69c12c383acaf5c5ce14082871e63989 Mon Sep 17 00:00:00 2001 From: Lysander Treumann Date: Tue, 21 Apr 2026 15:01:27 +0200 Subject: [PATCH] Changes behavior of the panel/dock size slider - from: new size is committed as soon as the slider position is changed (triggers panel/dock restart), - to: new size is committed only when slider is released. --- cosmic-settings/src/pages/desktop/panel/inner.rs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/cosmic-settings/src/pages/desktop/panel/inner.rs b/cosmic-settings/src/pages/desktop/panel/inner.rs index 77d2d9b..9974e54 100644 --- a/cosmic-settings/src/pages/desktop/panel/inner.rs +++ b/cosmic-settings/src/pages/desktop/panel/inner.rs @@ -24,6 +24,7 @@ pub struct PageInner { pub(crate) panel_config: Option, pub opacity: f32, pub opacity_changing: bool, + pub size: PanelSize, pub outputs: Vec, pub anchors: Vec, pub backgrounds: Vec, @@ -41,6 +42,7 @@ impl Default for PageInner { panel_config: Option::default(), opacity: 0.0, opacity_changing: false, + size: PanelSize::M, outputs: vec![fl!("all-displays")], anchors: vec![ Anchor(PanelAnchor::Left).to_string(), @@ -207,7 +209,7 @@ pub(crate) fn style< text::body(fl!("small")).into(), slider( 0..=4, - match panel_config.size { + match inner.size { PanelSize::XS => 0, PanelSize::S => 1, PanelSize::M => 2, @@ -229,6 +231,7 @@ pub(crate) fn style< } }, ) + .on_release(Message::PanelSizeCommit) .width(Length::Fill) .apply(cosmic::widget::container) .max_width(250) @@ -420,6 +423,7 @@ pub enum Message { Output(usize), AnchorGap(bool), PanelSize(PanelSize), + PanelSizeCommit, Appearance(usize), ExtendToEdge(bool), OpacityRequest(f32), @@ -500,6 +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.system_default = Some(default.clone()); self.panel_config.clone_from(&self.system_default); } else { @@ -598,7 +603,10 @@ impl PageInner { _ = panel_config.set_border_radius(helper, new_radius).unwrap(); } Message::PanelSize(size) => { - _ = panel_config.set_size(helper, size); + self.size = size; + } + Message::PanelSizeCommit => { + _ = panel_config.set_size(helper, self.size.clone()); // Reset any size overrides the user might have set _ = panel_config.set_size_center(helper, None); _ = panel_config.set_size_wings(helper, None); @@ -661,6 +669,7 @@ impl PageInner { } } Message::PanelConfig(c) => { + self.size = c.size.clone(); self.panel_config = Some(*c); return Task::none(); }