@@ -2,6 +2,14 @@ import Carbon
22import Cocoa
33import os
44
5+ public enum MachPortError : Error {
6+ case failedToCreateCGEventSource
7+ case failedToCreateCFRunLoopSource
8+ case failedToCreateMachPort
9+ case failedToCreateKeyCode( Int )
10+ case failedToCreateEvent
11+ }
12+
513public class MachPortEventPublisher {
614 @Published public internal( set) var flagsChanged : CGEventFlags ?
715 @Published public internal( set) var event : MachPortEvent ?
@@ -94,15 +102,15 @@ public final class MachPortEventController: MachPortEventPublisher, @unchecked S
94102
95103 public func createEvent( _ key: Int , type: CGEventType , flags: CGEventFlags ,
96104 tapLocation: CGEventTapLocation = . cghidEventTap,
97- configure: ( CGEvent ) -> Void = { _ in } ) throws -> CGEvent {
105+ configure: ( CGEvent ) -> Void = { _ in } ) throws ( MachPortError ) -> CGEvent {
98106 guard let cgKeyCode = CGKeyCode ( exactly: key) else {
99- throw MachPortError . failedToCreateKeyCode ( key)
107+ throw . failedToCreateKeyCode( key)
100108 }
101109
102110 guard let cgEvent = CGEvent ( keyboardEventSource: eventSource,
103111 virtualKey: cgKeyCode,
104112 keyDown: type == . keyDown) else {
105- throw MachPortError . failedToCreateEvent
113+ throw . failedToCreateEvent
106114 }
107115
108116 cgEvent. setIntegerValueField ( . eventSourceUserData, value: signature)
@@ -207,7 +215,7 @@ public final class MachPortEventController: MachPortEventPublisher, @unchecked S
207215 return newEvent. result
208216 }
209217
210- private final func createMachPort( _ currentMode: CFRunLoopMode ) throws -> CFMachPort {
218+ private final func createMachPort( _ currentMode: CFRunLoopMode ) throws ( MachPortError ) -> CFMachPort {
211219 let userInfo = UnsafeMutableRawPointer ( Unmanaged . passUnretained ( self ) . toOpaque ( ) )
212220
213221 guard let machPort = CGEvent . tapCreate (
@@ -230,7 +238,7 @@ public final class MachPortEventController: MachPortEventPublisher, @unchecked S
230238 }
231239 return Unmanaged . passUnretained ( event)
232240 } , userInfo: userInfo) else {
233- throw MachPortError . failedToCreateMachPort
241+ throw . failedToCreateMachPort
234242 }
235243 return machPort
236244 }
0 commit comments