fix(shortcuts): fix shortcut replacement button (#1846)

Co-authored-by: Levi Portenier <levi@system76.com>
This commit is contained in:
Djo 2026-02-19 00:39:29 +01:00 committed by GitHub
parent 52553ca482
commit 2019f1c33c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -190,9 +190,7 @@ impl Page {
Message::ReplaceApply => { Message::ReplaceApply => {
if let Some((mut binding, ..)) = self.replace_dialog.pop() { if let Some((mut binding, ..)) = self.replace_dialog.pop() {
self.model.config_remove(&binding); self.add_shortcut(binding, true);
binding.keycode = None;
self.add_shortcut(binding);
if self.replace_dialog.is_empty() { if self.replace_dialog.is_empty() {
self.add_shortcut = Default::default(); self.add_shortcut = Default::default();
@ -274,7 +272,7 @@ impl Page {
iced_winit::platform_specific::commands::keyboard_shortcuts_inhibit::inhibit_shortcuts(false).discard(), 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(); _ = self.model.on_enter();
return Task::batch(vec![ return Task::batch(vec![
@ -339,7 +337,7 @@ impl Page {
iced_winit::platform_specific::commands::keyboard_shortcuts_inhibit::inhibit_shortcuts(false).discard(), 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(); _ = self.model.on_enter();
return Task::batch(vec![ return Task::batch(vec![
@ -478,12 +476,15 @@ impl Page {
.into() .into()
} }
fn add_shortcut(&mut self, mut binding: Binding) { fn add_shortcut(&mut self, mut binding: Binding, replace: bool) {
if let Some(action) = self.model.config_contains(&binding) { if replace {
self.model.config_remove(&binding);
} else if let Some(action) = self.model.config_contains(&binding) {
let action_str = super::localize_action(&action); let action_str = super::localize_action(&action);
self.replace_dialog.push((binding, action, action_str)); self.replace_dialog.push((binding, action, action_str));
return; return;
} }
binding.keycode = None;
binding.description = Some(self.add_shortcut.name.clone()); binding.description = Some(self.add_shortcut.name.clone());
let new_action = Action::Spawn(self.add_shortcut.task.clone()); let new_action = Action::Spawn(self.add_shortcut.task.clone());
self.model.config_add(new_action, binding); self.model.config_add(new_action, binding);