Skip to content

Commit

Permalink
🔀 Merge pull request #160 from `MrKai77/151-possibility-to-trigger-em…
Browse files Browse the repository at this point in the history
…oji-shortcut-if-just-tapped`

✨ #151 Possibility to trigger emoji shortcut if just tapped
  • Loading branch information
MrKai77 authored Jan 9, 2024
2 parents fc2e5c8 + a3524be commit fff60d4
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 14 deletions.
43 changes: 30 additions & 13 deletions Loop/Managers/KeybindMonitor.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ class KeybindMonitor {
private var pressedKeys = Set<CGKeyCode>()
private var lastKeyReleaseTime: Date = Date.now

// Currently, special events only contain the globe key, as it can also be used as a emoji key.
private let specialEvents: [CGKeyCode] = [179]
var canPassthroughSpecialEvents = true // If mouse has been moved

func resetPressedKeys() {
KeybindMonitor.shared.pressedKeys = []
}
Expand All @@ -28,19 +32,29 @@ class KeybindMonitor {

self.eventMonitor = CGEventMonitor(eventMask: [.keyDown, .keyUp]) { cgEvent in
if cgEvent.type == .keyDown || cgEvent.type == .keyUp,
let event = NSEvent(cgEvent: cgEvent),
!event.isARepeat {

if event.type == .keyUp {
KeybindMonitor.shared.pressedKeys.remove(event.keyCode.baseKey)
} else if event.type == .keyDown {
KeybindMonitor.shared.pressedKeys.insert(event.keyCode.baseKey)
}

return self.performKeybind(event: event) ? nil : Unmanaged.passUnretained(cgEvent)
let event = NSEvent(cgEvent: cgEvent),
!event.isARepeat {

if !self.specialEvents.contains(event.keyCode.baseKey) {
if event.type == .keyUp {
KeybindMonitor.shared.pressedKeys.remove(event.keyCode.baseKey)
} else if event.type == .keyDown {
KeybindMonitor.shared.pressedKeys.insert(event.keyCode.baseKey)
}

if self.performKeybind(event: event) {
return nil
}
} else {
if self.canPassthroughSpecialEvents {
return Unmanaged.passRetained(cgEvent)
} else {
return nil
}
}
}

return nil
return Unmanaged.passRetained(cgEvent)
}

self.flagsEventMonitor = CGEventMonitor(eventMask: .flagsChanged) { cgEvent in
Expand All @@ -55,18 +69,22 @@ class KeybindMonitor {

self.performKeybind(event: event)
}
return Unmanaged.passUnretained(cgEvent)
return Unmanaged.passRetained(cgEvent)
}

self.eventMonitor!.start()
self.flagsEventMonitor!.start()
}

func stop() {
self.resetPressedKeys()
self.canPassthroughSpecialEvents = true

guard self.eventMonitor != nil &&
self.flagsEventMonitor != nil else {
return
}

self.eventMonitor?.stop()
self.eventMonitor = nil

Expand All @@ -90,7 +108,6 @@ class KeybindMonitor {

if pressedKeys.contains(.kVK_Escape) {
Notification.Name.forceCloseLoop.post()
KeybindMonitor.shared.resetPressedKeys()
return true
}

Expand Down
2 changes: 1 addition & 1 deletion Loop/Managers/LoopManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ class LoopManager: ObservableObject {

private func mouseMoved(_ event: NSEvent) {
guard self.isLoopActive else { return }
keybindMonitor.canPassthroughSpecialEvents = false

let noActionDistance: CGFloat = 10

Expand Down Expand Up @@ -275,7 +276,6 @@ class LoopManager: ObservableObject {
self.cancelTriggerDelayTimer()
self.closeWindows()

self.keybindMonitor.resetPressedKeys()
self.keybindMonitor.stop()
self.mouseMovedEventMonitor!.stop()

Expand Down

0 comments on commit fff60d4

Please sign in to comment.