diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 26e04006..6b453e72 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -6,6 +6,7 @@ excludes other invaluable contributions like language bindings and text and video tutorials. - Bobyshev Alexander + - Alzathar - Laurent Aphecetche - Matt Arsenault - Takuro Ashie @@ -235,6 +236,7 @@ video tutorials. - Ed Ropple - Aleksey Rybalkin - Mikko Rytkönen + - saikyun - Riku Salminen - Yoshinori Sano - Brandon Schaefer diff --git a/README.md b/README.md index 7e640c37..ed18b950 100644 --- a/README.md +++ b/README.md @@ -129,6 +129,8 @@ information on what to include when reporting a bug. - [Win32] Removed support for Windows XP and Vista (#2505) - [Cocoa] Added `QuartzCore` framework as link-time dependency - [Cocoa] Removed support for OS X 10.10 Yosemite and earlier (#2506) + - [Cocoa] Bugfix: Cmd+Period, Ctrl+Tab and Ctrl+Esc key events were not emitted + (#1362,#2278) - [Wayland] Bugfix: The fractional scaling related objects were not destroyed - [Wayland] Bugfix: `glfwInit` would segfault on compositor with no seat (#2517) - [Wayland] Bugfix: A drag entering a non-GLFW surface could cause a segfault diff --git a/src/cocoa_window.m b/src/cocoa_window.m index 1769f79b..61049808 100644 --- a/src/cocoa_window.m +++ b/src/cocoa_window.m @@ -599,6 +599,34 @@ static const NSRange kEmptyRange = { NSNotFound, 0 }; _glfwInputKey(window, key, [event keyCode], GLFW_RELEASE, mods); } +- (BOOL)performKeyEquivalent:(NSEvent *)event +{ + // HACK: Some key combinations are consumed before reaching keyDown: + // so we claim those events and emit them here + const int key = translateKey([event keyCode]); + const int mods = translateFlags([event modifierFlags]); + + if (mods & GLFW_MOD_CONTROL) + { + if (key == GLFW_KEY_TAB || key == GLFW_KEY_ESCAPE) + { + _glfwInputKey(window, key, [event keyCode], GLFW_PRESS, mods); + return YES; + } + } + + if (mods & GLFW_MOD_SUPER) + { + if (key == GLFW_KEY_PERIOD) + { + _glfwInputKey(window, key, [event keyCode], GLFW_PRESS, mods); + return YES; + } + } + + return [super performKeyEquivalent:event]; +} + - (void)scrollWheel:(NSEvent *)event { double deltaX = [event scrollingDeltaX];