Initial commit.
This commit is contained in:
55
src/EventMonitor.swift
Normal file
55
src/EventMonitor.swift
Normal file
@@ -0,0 +1,55 @@
|
||||
import Cocoa
|
||||
|
||||
class EventMonitor {
|
||||
fileprivate let mask: NSEvent.EventTypeMask
|
||||
fileprivate var monitor: Any?
|
||||
|
||||
fileprivate init(mask: NSEvent.EventTypeMask) {
|
||||
self.mask = mask
|
||||
}
|
||||
|
||||
deinit {
|
||||
stop()
|
||||
}
|
||||
|
||||
func start() {
|
||||
fatalError("start must be implemented by a subclass of EventMonitor")
|
||||
}
|
||||
|
||||
func stop() {
|
||||
if monitor != nil {
|
||||
NSEvent.removeMonitor(monitor!)
|
||||
monitor = nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
final class LocalEventMonitor: EventMonitor {
|
||||
typealias Handler = (NSEvent) -> NSEvent?
|
||||
|
||||
private let handler: Handler
|
||||
|
||||
init(mask: NSEvent.EventTypeMask, handler: @escaping Handler) {
|
||||
self.handler = handler
|
||||
super.init(mask: mask)
|
||||
}
|
||||
|
||||
override func start() {
|
||||
monitor = NSEvent.addLocalMonitorForEvents(matching: mask, handler: handler)
|
||||
}
|
||||
}
|
||||
|
||||
final class GlobalEventMonitor: EventMonitor {
|
||||
typealias Handler = (NSEvent) -> Void
|
||||
|
||||
private let handler: Handler
|
||||
|
||||
init(mask: NSEvent.EventTypeMask, handler: @escaping Handler) {
|
||||
self.handler = handler
|
||||
super.init(mask: mask)
|
||||
}
|
||||
|
||||
override func start() {
|
||||
monitor = NSEvent.addGlobalMonitorForEvents(matching: mask, handler: handler)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user