fix: set initial binding input and select all for input strings when focused
This commit is contained in:
parent
bb0fb95692
commit
3fbb747c19
1 changed files with 19 additions and 12 deletions
|
|
@ -48,11 +48,7 @@ pub struct ShortcutBinding {
|
||||||
|
|
||||||
impl ShortcutBinding {
|
impl ShortcutBinding {
|
||||||
pub fn reset(&mut self) {
|
pub fn reset(&mut self) {
|
||||||
self.input = if self.is_saved {
|
self.input = self.binding.to_string();
|
||||||
self.binding.to_string()
|
|
||||||
} else {
|
|
||||||
String::new()
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -249,6 +245,11 @@ impl Model {
|
||||||
}
|
}
|
||||||
|
|
||||||
self.shortcut_models = (self.actions)(&self.defaults, &shortcuts);
|
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.shortcut_context = None;
|
||||||
self.editing = None;
|
self.editing = None;
|
||||||
|
|
||||||
|
|
@ -324,11 +325,12 @@ impl Model {
|
||||||
}
|
}
|
||||||
|
|
||||||
self.editing = Some(binding_id);
|
self.editing = Some(binding_id);
|
||||||
shortcut.input.clear();
|
shortcut.reset();
|
||||||
|
|
||||||
return Task::batch(vec![
|
return Task::batch(vec![
|
||||||
iced_winit::platform_specific::commands::keyboard_shortcuts_inhibit::inhibit_shortcuts(true).discard(),
|
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![
|
return Task::batch(vec![
|
||||||
iced_winit::platform_specific::commands::keyboard_shortcuts_inhibit::inhibit_shortcuts(true).discard(),
|
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(model) = self.shortcut_models.get_mut(short_id) {
|
||||||
if let Some(shortcut) = model.bindings.get_mut(id) {
|
if let Some(shortcut) = model.bindings.get_mut(id) {
|
||||||
shortcut.pending = shortcut.binding.clone();
|
shortcut.pending = shortcut.binding.clone();
|
||||||
|
shortcut.input = shortcut.binding.to_string();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -442,7 +446,10 @@ impl Model {
|
||||||
if enable {
|
if enable {
|
||||||
self.editing = Some(id);
|
self.editing = Some(id);
|
||||||
shortcut.input = shortcut.binding.to_string();
|
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) {
|
} else if self.editing == Some(id) {
|
||||||
self.editing = None;
|
self.editing = None;
|
||||||
return iced_winit::platform_specific::commands::keyboard_shortcuts_inhibit::inhibit_shortcuts(false).discard();
|
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() {
|
if shortcut.pending.keycode.is_none() && modifiers.is_empty() {
|
||||||
self.editing = None;
|
self.editing = None;
|
||||||
shortcut.input = String::new();
|
shortcut.reset();
|
||||||
return Task::batch(vec![
|
return Task::batch(vec![
|
||||||
cosmic::widget::text_input::focus(self.add_keybindings_button_id.clone()),
|
cosmic::widget::text_input::focus(self.add_keybindings_button_id.clone()),
|
||||||
iced_winit::platform_specific::commands::keyboard_shortcuts_inhibit::inhibit_shortcuts(false).discard()
|
iced_winit::platform_specific::commands::keyboard_shortcuts_inhibit::inhibit_shortcuts(false).discard()
|
||||||
|
|
@ -676,7 +683,7 @@ impl Model {
|
||||||
}
|
}
|
||||||
|
|
||||||
if !new_binding.is_set() {
|
if !new_binding.is_set() {
|
||||||
shortcut.input.clear();
|
shortcut.reset();
|
||||||
return Task::none();
|
return Task::none();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -707,7 +714,7 @@ impl Model {
|
||||||
if let Some(shortcut) = model.bindings.get_mut(id) {
|
if let Some(shortcut) = model.bindings.get_mut(id) {
|
||||||
let prev_binding = mem::replace(&mut shortcut.binding, new_binding.clone());
|
let prev_binding = mem::replace(&mut shortcut.binding, new_binding.clone());
|
||||||
shortcut.is_saved = true;
|
shortcut.is_saved = true;
|
||||||
shortcut.input.clear();
|
shortcut.reset();
|
||||||
|
|
||||||
if self.editing == Some(id) {
|
if self.editing == Some(id) {
|
||||||
self.editing = None;
|
self.editing = None;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue