From 18c108ed035b62b7a7aa2fce91eb2e7e57fc6b4c Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 14 Jan 2019 10:53:31 +0530 Subject: [PATCH] macOS: Fix a regression that broke mapping of ctrl+tab Fixes #1304 --- docs/changelog.rst | 2 ++ glfw/cocoa_init.m | 14 ++++++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 036a722d6..3d9626498 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -18,6 +18,8 @@ Changelog - macOS: Ensure that when running from a bundle, the bundle kitty exe is preferred over any kitty in PATH (:iss:`1280`) +- macOS: Fix a regression that broke mapping of :kbd:`ctrl+tab` (:iss:`1304`) + - Add a list of user-created kittens to the docs - Fix a regression that broke changing mouse wheel scroll direction with diff --git a/glfw/cocoa_init.m b/glfw/cocoa_init.m index 2d883d084..e567c6736 100644 --- a/glfw/cocoa_init.m +++ b/glfw/cocoa_init.m @@ -299,6 +299,14 @@ static GLFWbool initializeTIS(void) ////// GLFW platform API ////// ////////////////////////////////////////////////////////////////////////// +static inline bool +is_ctrl_tab(NSEvent *event) { + NSEventModifierFlags modifierFlags = [event modifierFlags] & NSEventModifierFlagDeviceIndependentFlagsMask; + return event.keyCode == kVK_Tab && (modifierFlags == NSEventModifierFlagControl || modifierFlags == ( + NSEventModifierFlagControl | NSEventModifierFlagShift)); +} + + int _glfwPlatformInit(void) { _glfw.ns.autoreleasePool = [[NSAutoreleasePool alloc] init]; @@ -312,8 +320,7 @@ int _glfwPlatformInit(void) NSEvent* (^keydown_block)(NSEvent*) = ^ NSEvent* (NSEvent* event) { - NSEventModifierFlags modifierFlags = [event modifierFlags]; - if (event.keyCode == kVK_Tab && (modifierFlags == NSEventModifierFlagControl || modifierFlags == (NSEventModifierFlagControl | NSEventModifierFlagShift))) { + if (is_ctrl_tab(event)) { // Cocoa swallows Ctrl+Tab to cycle between views [[NSApp keyWindow].contentView keyDown:event]; } @@ -323,14 +330,13 @@ int _glfwPlatformInit(void) NSEvent* (^keyup_block)(NSEvent*) = ^ NSEvent* (NSEvent* event) { - NSEventModifierFlags modifierFlags = [event modifierFlags]; if ([event modifierFlags] & NSEventModifierFlagCommand) { // From http://cocoadev.com/index.pl?GameKeyboardHandlingAlmost // This works around an AppKit bug, where key up events while holding // down the command key don't get sent to the key window. [[NSApp keyWindow] sendEvent:event]; } - if (event.keyCode == kVK_Tab && (modifierFlags == NSEventModifierFlagControl || modifierFlags == (NSEventModifierFlagControl | NSEventModifierFlagShift))) { + if (is_ctrl_tab(event)) { // Cocoa swallows Ctrl+Tab to cycle between views [[NSApp keyWindow].contentView keyUp:event]; }