diff --git a/Loop/Extensions/CGKeyCode+Extensions.swift b/Loop/Extensions/CGKeyCode+Extensions.swift index de136efc..eba4e764 100644 --- a/Loop/Extensions/CGKeyCode+Extensions.swift +++ b/Loop/Extensions/CGKeyCode+Extensions.swift @@ -141,6 +141,12 @@ extension CGKeyCode { static let kVK_DownArrow: CGKeyCode = 0x7D static let kVK_UpArrow: CGKeyCode = 0x7E + // When the globe key is being pressed + static let kVK_LeftArrow_Globe: CGKeyCode = 0x73 + static let kVK_RightArrow_Globe: CGKeyCode = 0x77 + static let kVK_DownArrow_Globe: CGKeyCode = 0x79 + static let kVK_UpArrow_Globe: CGKeyCode = 0x74 + // ISO keyboards only static let kVK_ISO_Section: CGKeyCode = 0x0A @@ -151,6 +157,18 @@ extension CGKeyCode { static let kVK_JIS_Eisu: CGKeyCode = 0x66 static let kVK_JIS_Kana: CGKeyCode = 0x68 + // Some keycodes seem to alter when a modifier key (ex. the globe key) is being pressed. + var baseKey: CGKeyCode { + switch self { + case .kVK_ANSI_KeypadEnter: CGKeyCode.kVK_Return + case .kVK_LeftArrow_Globe: CGKeyCode.kVK_LeftArrow + case .kVK_RightArrow_Globe: CGKeyCode.kVK_RightArrow + case .kVK_DownArrow_Globe: CGKeyCode.kVK_DownArrow + case .kVK_UpArrow_Globe: CGKeyCode.kVK_UpArrow + default: self + } + } + var isModifier: Bool { return (.kVK_RightCommand ... .kVK_Function).contains(self) } diff --git a/Loop/Helpers/KeybindMonitor.swift b/Loop/Helpers/KeybindMonitor.swift index 5f069bd0..16d0df9d 100644 --- a/Loop/Helpers/KeybindMonitor.swift +++ b/Loop/Helpers/KeybindMonitor.swift @@ -67,9 +67,9 @@ class KeybindMonitor { } if keyEvent.type == .keyUp { - KeybindMonitor.shared.pressedKeys.remove(keyEvent.keyCode) + KeybindMonitor.shared.pressedKeys.remove(keyEvent.keyCode.baseKey) } else if keyEvent.type == .keyDown { - KeybindMonitor.shared.pressedKeys.insert(keyEvent.keyCode) + KeybindMonitor.shared.pressedKeys.insert(keyEvent.keyCode.baseKey) } KeybindMonitor.shared.performKeybind(event: keyEvent)