Fix macOS shortcut handling in text_input and text_editor

This commit is contained in:
Héctor Ramón Jiménez 2025-11-29 09:24:03 +01:00
parent 4ba180319a
commit d66cf51ad2
No known key found for this signature in database
GPG key ID: 7CC46565708259A7
2 changed files with 25 additions and 27 deletions

View file

@ -1173,9 +1173,6 @@ impl<Message> Binding<Message> {
return None; return None;
} }
#[cfg(target_os = "macos")]
let key = convert_macos_shortcut(&key, modifiers);
let combination = match key.as_ref() { let combination = match key.as_ref() {
keyboard::Key::Character("c") if modifiers.command() => { keyboard::Key::Character("c") if modifiers.command() => {
Some(Self::Copy) Some(Self::Copy)
@ -1198,6 +1195,10 @@ impl<Message> Binding<Message> {
return Some(binding); return Some(binding);
} }
#[cfg(target_os = "macos")]
let modified_key =
convert_macos_shortcut(&key, modifiers).unwrap_or(modified_key);
match modified_key.as_ref() { match modified_key.as_ref() {
keyboard::Key::Named(key::Named::Enter) => Some(Self::Enter), keyboard::Key::Named(key::Named::Enter) => Some(Self::Enter),
keyboard::Key::Named(key::Named::Backspace) => { keyboard::Key::Named(key::Named::Backspace) => {
@ -1497,28 +1498,20 @@ pub fn default(theme: &Theme, status: Status) -> Style {
pub(crate) fn convert_macos_shortcut( pub(crate) fn convert_macos_shortcut(
key: &keyboard::Key, key: &keyboard::Key,
modifiers: keyboard::Modifiers, modifiers: keyboard::Modifiers,
) -> &keyboard::Key { ) -> Option<keyboard::Key> {
if modifiers != keyboard::Modifiers::CTRL { if modifiers != keyboard::Modifiers::CTRL {
return key; return None;
} }
match key.as_ref() { let key = match key.as_ref() {
keyboard::Key::Character("b") => { keyboard::Key::Character("b") => key::Named::ArrowLeft,
&keyboard::Key::Named(key::Named::ArrowLeft) keyboard::Key::Character("f") => key::Named::ArrowRight,
} keyboard::Key::Character("a") => key::Named::Home,
keyboard::Key::Character("f") => { keyboard::Key::Character("e") => key::Named::End,
&keyboard::Key::Named(key::Named::ArrowRight) keyboard::Key::Character("h") => key::Named::Backspace,
} keyboard::Key::Character("d") => key::Named::Delete,
keyboard::Key::Character("a") => { _ => return None,
&keyboard::Key::Named(key::Named::Home) };
}
keyboard::Key::Character("e") => &keyboard::Key::Named(key::Named::End), Some(keyboard::Key::Named(key))
keyboard::Key::Character("h") => {
&keyboard::Key::Named(key::Named::Backspace)
}
keyboard::Key::Character("d") => {
&keyboard::Key::Named(key::Named::Delete)
}
_ => key,
}
} }

View file

@ -1039,9 +1039,14 @@ where
} }
#[cfg(target_os = "macos")] #[cfg(target_os = "macos")]
let key = crate::text_editor::convert_macos_shortcut( let macos_shortcut =
key, modifiers, crate::text_editor::convert_macos_shortcut(
); key, modifiers,
);
#[cfg(target_os = "macos")]
let modified_key =
macos_shortcut.as_ref().unwrap_or(modified_key);
match modified_key.as_ref() { match modified_key.as_ref() {
keyboard::Key::Named(key::Named::Enter) => { keyboard::Key::Named(key::Named::Enter) => {