From 9d3a0594f9afa2397041db14ef5642d57d0d7827 Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Wed, 15 Jan 2025 07:33:28 -0700 Subject: [PATCH] Exclude function keys from input handler (#23070) Fixes #22674 Release Notes: - Fixed a bug binding to `fn-X` (where X is a printing key) on macOS --- crates/gpui/src/platform/mac/window.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/crates/gpui/src/platform/mac/window.rs b/crates/gpui/src/platform/mac/window.rs index 04fda6294a0ae1d905270222e2730413229a4f98..dc715a071b53679d1595ed1ce0e458d783a988a5 100644 --- a/crates/gpui/src/platform/mac/window.rs +++ b/crates/gpui/src/platform/mac/window.rs @@ -1258,7 +1258,12 @@ extern "C" fn handle_key_event(this: &Object, native_event: id, key_equivalent: // We also do this for non-printing keys (like arrow keys and escape) as the IME menu // may need them even if there is no marked text; // however we skip keys with control or the input handler adds control-characters to the buffer. - if is_composing || (event.keystroke.key_char.is_none() && !event.keystroke.modifiers.control) { + // and keys with function, as the input handler swallows them. + if is_composing + || (event.keystroke.key_char.is_none() + && !event.keystroke.modifiers.control + && !event.keystroke.modifiers.function) + { { let mut lock = window_state.as_ref().lock(); lock.keystroke_for_do_command = Some(event.keystroke.clone());