mirror of
https://github.com/lwouis/alt-tab-macos.git
synced 2026-05-24 11:20:36 +00:00
fix: keyboard events don't stop being listened to (closes #18)
This commit is contained in:
@@ -1,8 +1,10 @@
|
||||
import Cocoa
|
||||
|
||||
var eventTap: CFMachPort?
|
||||
|
||||
func listenToGlobalKeyboardEvents(_ delegate: Application) {
|
||||
let eventMask = [CGEventType.keyDown, CGEventType.keyUp, CGEventType.flagsChanged].reduce(CGEventMask(0), { $0 | (1 << $1.rawValue) })
|
||||
let eventTap = CGEvent.tapCreate(
|
||||
eventTap = CGEvent.tapCreate(
|
||||
tap: .cgSessionEventTap,
|
||||
place: .headInsertEventTap,
|
||||
options: .defaultTap,
|
||||
@@ -19,23 +21,27 @@ func listenToGlobalKeyboardEvents(_ delegate: Application) {
|
||||
}
|
||||
|
||||
func keyboardHandler(_ cgEvent: CGEvent, _ delegate: Application) -> Unmanaged<CGEvent>? {
|
||||
if cgEvent.type == .keyDown || cgEvent.type == .keyUp || cgEvent.type == .flagsChanged, let event = NSEvent.init(cgEvent: cgEvent) {
|
||||
let keyDown = event.type == .keyDown
|
||||
let optionKeyEvent = event.keyCode == metaKey
|
||||
let tabKeyEvent = event.keyCode == tabKey
|
||||
if optionKeyEvent && event.modifiersDown([metaModifierFlag]) {
|
||||
delegate.keyDownMeta()
|
||||
} else if tabKeyEvent && event.modifiersDown([metaModifierFlag]) && keyDown {
|
||||
delegate.keyDownMetaTab()
|
||||
// focused app will not receive the event (will not press tab key in that app)
|
||||
return nil
|
||||
} else if tabKeyEvent && event.modifiersDown([metaModifierFlag, .shift]) && keyDown {
|
||||
delegate.keyDownMetaShiftTab()
|
||||
// focused app will not receive the event (will not press tab key in that app)
|
||||
return nil
|
||||
} else if optionKeyEvent && !keyDown {
|
||||
delegate.keyUpMeta()
|
||||
if cgEvent.type == .keyDown || cgEvent.type == .keyUp || cgEvent.type == .flagsChanged {
|
||||
if let event = NSEvent.init(cgEvent: cgEvent) {
|
||||
let keyDown = event.type == .keyDown
|
||||
let optionKeyEvent = event.keyCode == metaKey
|
||||
let tabKeyEvent = event.keyCode == tabKey
|
||||
if optionKeyEvent && event.modifiersDown([metaModifierFlag]) {
|
||||
delegate.keyDownMeta()
|
||||
} else if tabKeyEvent && event.modifiersDown([metaModifierFlag]) && keyDown {
|
||||
delegate.keyDownMetaTab()
|
||||
// focused app will not receive the event (will not press tab key in that app)
|
||||
return nil
|
||||
} else if tabKeyEvent && event.modifiersDown([metaModifierFlag, .shift]) && keyDown {
|
||||
delegate.keyDownMetaShiftTab()
|
||||
// focused app will not receive the event (will not press tab key in that app)
|
||||
return nil
|
||||
} else if optionKeyEvent && !keyDown {
|
||||
delegate.keyUpMeta()
|
||||
}
|
||||
}
|
||||
} else if cgEvent.type == .tapDisabledByUserInput || cgEvent.type == .tapDisabledByTimeout {
|
||||
CGEvent.tapEnable(tap: eventTap!, enable: true)
|
||||
}
|
||||
// focused app will receive the event
|
||||
return Unmanaged.passRetained(cgEvent)
|
||||
|
||||
Reference in New Issue
Block a user