From 2019f1c33c8712ea7267efebaddb081b80e2e5ce Mon Sep 17 00:00:00 2001 From: Djo Date: Thu, 19 Feb 2026 00:39:29 +0100 Subject: [PATCH] fix(shortcuts): fix shortcut replacement button (#1846) Co-authored-by: Levi Portenier --- .../src/pages/input/keyboard/shortcuts/custom.rs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/cosmic-settings/src/pages/input/keyboard/shortcuts/custom.rs b/cosmic-settings/src/pages/input/keyboard/shortcuts/custom.rs index 96dcff9..c6f9d97 100644 --- a/cosmic-settings/src/pages/input/keyboard/shortcuts/custom.rs +++ b/cosmic-settings/src/pages/input/keyboard/shortcuts/custom.rs @@ -190,9 +190,7 @@ impl Page { Message::ReplaceApply => { if let Some((mut binding, ..)) = self.replace_dialog.pop() { - self.model.config_remove(&binding); - binding.keycode = None; - self.add_shortcut(binding); + self.add_shortcut(binding, true); if self.replace_dialog.is_empty() { self.add_shortcut = Default::default(); @@ -274,7 +272,7 @@ impl Page { iced_winit::platform_specific::commands::keyboard_shortcuts_inhibit::inhibit_shortcuts(false).discard(), ]); } - self.add_shortcut(binding); + self.add_shortcut(binding, false); _ = self.model.on_enter(); return Task::batch(vec![ @@ -339,7 +337,7 @@ impl Page { iced_winit::platform_specific::commands::keyboard_shortcuts_inhibit::inhibit_shortcuts(false).discard(), ]); } - self.add_shortcut(binding); + self.add_shortcut(binding, false); _ = self.model.on_enter(); return Task::batch(vec![ @@ -478,12 +476,15 @@ impl Page { .into() } - fn add_shortcut(&mut self, mut binding: Binding) { - if let Some(action) = self.model.config_contains(&binding) { + fn add_shortcut(&mut self, mut binding: Binding, replace: bool) { + if replace { + self.model.config_remove(&binding); + } else if let Some(action) = self.model.config_contains(&binding) { let action_str = super::localize_action(&action); self.replace_dialog.push((binding, action, action_str)); return; } + binding.keycode = None; binding.description = Some(self.add_shortcut.name.clone()); let new_action = Action::Spawn(self.add_shortcut.task.clone()); self.model.config_add(new_action, binding);