diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2024-02-15 15:45:15 +0100 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2024-02-15 15:45:15 +0100 |
commit | 3ed81a8f707114453b3a6de79b21b9f43378f506 (patch) | |
tree | 54b5262c4864701380dda3d9b19b732f9e4c8543 /platform | |
parent | 39fcef1b2fdbd97ec2847e8be0f485a9b4628180 (diff) | |
parent | 757a691b5e848331b842b182d9da47b81585f14a (diff) | |
download | redot-engine-3ed81a8f707114453b3a6de79b21b9f43378f506.tar.gz |
Merge pull request #88334 from passivestar/ctrl-tab-mac
[macOS] Fix `Ctrl+Tab` and `Ctrl+Shift+Tab` not working
Diffstat (limited to 'platform')
-rw-r--r-- | platform/macos/display_server_macos.mm | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/platform/macos/display_server_macos.mm b/platform/macos/display_server_macos.mm index 344dc1a8f7..165b1e4fbf 100644 --- a/platform/macos/display_server_macos.mm +++ b/platform/macos/display_server_macos.mm @@ -699,10 +699,12 @@ DisplayServerMacOS::WindowData &DisplayServerMacOS::get_window(WindowID p_window } void DisplayServerMacOS::send_event(NSEvent *p_event) { - // Special case handling of command-period, which is traditionally a special - // shortcut in macOS and doesn't arrive at our regular keyDown handler. + // Special case handling of shortcuts that don't arrive at the regular keyDown handler if ([p_event type] == NSEventTypeKeyDown) { - if ((([p_event modifierFlags] & NSEventModifierFlagDeviceIndependentFlagsMask) == NSEventModifierFlagCommand) && [p_event keyCode] == 0x2f) { + NSEventModifierFlags flags = [p_event modifierFlags] & NSEventModifierFlagDeviceIndependentFlagsMask; + + // Command-period + if ((flags == NSEventModifierFlagCommand) && [p_event keyCode] == 0x2f) { Ref<InputEventKey> k; k.instantiate(); @@ -715,6 +717,24 @@ void DisplayServerMacOS::send_event(NSEvent *p_event) { k->set_echo([p_event isARepeat]); Input::get_singleton()->parse_input_event(k); + return; + } + + // Ctrl+Tab and Ctrl+Shift+Tab + if (((flags == NSEventModifierFlagControl) || (flags == (NSEventModifierFlagControl | NSEventModifierFlagShift))) && [p_event keyCode] == 0x30) { + Ref<InputEventKey> k; + k.instantiate(); + + get_key_modifier_state([p_event modifierFlags], k); + k->set_window_id(DisplayServerMacOS::INVALID_WINDOW_ID); + k->set_pressed(true); + k->set_keycode(Key::TAB); + k->set_physical_keycode(Key::TAB); + k->set_key_label(Key::TAB); + k->set_echo([p_event isARepeat]); + + Input::get_singleton()->parse_input_event(k); + return; } } } |