fix: set initial binding input and select all for input strings when focused

This commit is contained in:
Ashley Wulber 2025-09-16 15:35:12 -04:00 committed by Michael Murphy
parent bb0fb95692
commit 3fbb747c19

View file

@ -48,11 +48,7 @@ pub struct ShortcutBinding {
impl ShortcutBinding {
pub fn reset(&mut self) {
self.input = if self.is_saved {
self.binding.to_string()
} else {
String::new()
};
self.input = self.binding.to_string();
}
}
@ -249,6 +245,11 @@ impl Model {
}
self.shortcut_models = (self.actions)(&self.defaults, &shortcuts);
for (_, model) in &mut self.shortcut_models {
for (_, binding) in &mut model.bindings {
binding.reset();
}
}
self.shortcut_context = None;
self.editing = None;
@ -324,11 +325,12 @@ impl Model {
}
self.editing = Some(binding_id);
shortcut.input.clear();
shortcut.reset();
return Task::batch(vec![
iced_winit::platform_specific::commands::keyboard_shortcuts_inhibit::inhibit_shortcuts(true).discard(),
widget::text_input::focus(shortcut.id.clone())
widget::text_input::focus(shortcut.id.clone()),
widget::text_input::select_all(shortcut.id.clone())
]);
}
@ -345,7 +347,8 @@ impl Model {
return Task::batch(vec![
iced_winit::platform_specific::commands::keyboard_shortcuts_inhibit::inhibit_shortcuts(true).discard(),
widget::text_input::focus(id)
widget::text_input::focus(id.clone()),
widget::text_input::select_all(id)
]);
}
}
@ -428,6 +431,7 @@ impl Model {
if let Some(model) = self.shortcut_models.get_mut(short_id) {
if let Some(shortcut) = model.bindings.get_mut(id) {
shortcut.pending = shortcut.binding.clone();
shortcut.input = shortcut.binding.to_string();
}
}
}
@ -442,7 +446,10 @@ impl Model {
if enable {
self.editing = Some(id);
shortcut.input = shortcut.binding.to_string();
return iced_winit::platform_specific::commands::keyboard_shortcuts_inhibit::inhibit_shortcuts(true).discard();
return Task::batch(vec![
iced_winit::platform_specific::commands::keyboard_shortcuts_inhibit::inhibit_shortcuts(true).discard(),
widget::text_input::select_all(shortcut.id.clone())
]);
} else if self.editing == Some(id) {
self.editing = None;
return iced_winit::platform_specific::commands::keyboard_shortcuts_inhibit::inhibit_shortcuts(false).discard();
@ -523,7 +530,7 @@ impl Model {
if shortcut.pending.keycode.is_none() && modifiers.is_empty() {
self.editing = None;
shortcut.input = String::new();
shortcut.reset();
return Task::batch(vec![
cosmic::widget::text_input::focus(self.add_keybindings_button_id.clone()),
iced_winit::platform_specific::commands::keyboard_shortcuts_inhibit::inhibit_shortcuts(false).discard()
@ -676,7 +683,7 @@ impl Model {
}
if !new_binding.is_set() {
shortcut.input.clear();
shortcut.reset();
return Task::none();
}
@ -707,7 +714,7 @@ impl Model {
if let Some(shortcut) = model.bindings.get_mut(id) {
let prev_binding = mem::replace(&mut shortcut.binding, new_binding.clone());
shortcut.is_saved = true;
shortcut.input.clear();
shortcut.reset();
if self.editing == Some(id) {
self.editing = None;