From d0707de8dc15466883f1044e0fcf045f433e370a Mon Sep 17 00:00:00 2001 From: Shimpei Otsubo Date: Mon, 24 Aug 2020 19:45:02 +0900 Subject: [PATCH 1/8] Rename to RemapFinder --- KeyType.xcodeproj/project.pbxproj | 8 ++++---- KeyType/KeyEventWatcher.swift | 2 +- KeyType/{EventConverter.swift => RemapFinder.swift} | 3 ++- KeyTypeTests/EventConverterTests.swift | 2 +- 4 files changed, 8 insertions(+), 7 deletions(-) rename KeyType/{EventConverter.swift => RemapFinder.swift} (94%) diff --git a/KeyType.xcodeproj/project.pbxproj b/KeyType.xcodeproj/project.pbxproj index 7f1af40..cb846fa 100644 --- a/KeyType.xcodeproj/project.pbxproj +++ b/KeyType.xcodeproj/project.pbxproj @@ -10,7 +10,7 @@ 870105941DE9646100486507 /* KeyEventController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 870105931DE9646100486507 /* KeyEventController.swift */; }; 870105961DE968CF00486507 /* Remap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 870105951DE968CF00486507 /* Remap.swift */; }; 870105981DE979DC00486507 /* Key.swift in Sources */ = {isa = PBXBuildFile; fileRef = 870105971DE979DC00486507 /* Key.swift */; }; - 8701059A1DE97ADB00486507 /* EventConverter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 870105991DE97ADB00486507 /* EventConverter.swift */; }; + 8701059A1DE97ADB00486507 /* RemapFinder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 870105991DE97ADB00486507 /* RemapFinder.swift */; }; 870105A01DEA07E700486507 /* KeyCombination.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8701059F1DEA07E700486507 /* KeyCombination.swift */; }; 870105A21DEA08AA00486507 /* CGEventExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 870105A11DEA08AA00486507 /* CGEventExtension.swift */; }; 8768503124F198E20021D517 /* Custom.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8768503024F198E20021D517 /* Custom.swift */; }; @@ -49,7 +49,7 @@ 870105931DE9646100486507 /* KeyEventController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyEventController.swift; sourceTree = ""; }; 870105951DE968CF00486507 /* Remap.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Remap.swift; sourceTree = ""; }; 870105971DE979DC00486507 /* Key.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Key.swift; sourceTree = ""; }; - 870105991DE97ADB00486507 /* EventConverter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EventConverter.swift; sourceTree = ""; }; + 870105991DE97ADB00486507 /* RemapFinder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RemapFinder.swift; sourceTree = ""; }; 8701059F1DEA07E700486507 /* KeyCombination.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyCombination.swift; sourceTree = ""; }; 870105A11DEA08AA00486507 /* CGEventExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CGEventExtension.swift; sourceTree = ""; }; 8768503024F198E20021D517 /* Custom.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Custom.swift; sourceTree = ""; }; @@ -149,7 +149,7 @@ 87EC00B41DE88D3D007C1F66 /* ViewController.swift */, 87EC00DD1DE89151007C1F66 /* KeyEventWatcher.swift */, 870105931DE9646100486507 /* KeyEventController.swift */, - 870105991DE97ADB00486507 /* EventConverter.swift */, + 870105991DE97ADB00486507 /* RemapFinder.swift */, 870105A11DEA08AA00486507 /* CGEventExtension.swift */, 87EC00B61DE88D3D007C1F66 /* Assets.xcassets */, 87EC00B81DE88D3D007C1F66 /* Main.storyboard */, @@ -336,7 +336,7 @@ files = ( 8768503124F198E20021D517 /* Custom.swift in Sources */, 87EC00B51DE88D3D007C1F66 /* ViewController.swift in Sources */, - 8701059A1DE97ADB00486507 /* EventConverter.swift in Sources */, + 8701059A1DE97ADB00486507 /* RemapFinder.swift in Sources */, 87DADDDA24F1874600D79B36 /* LRDvorak.swift in Sources */, 870105961DE968CF00486507 /* Remap.swift in Sources */, 87EC00B31DE88D3D007C1F66 /* AppDelegate.swift in Sources */, diff --git a/KeyType/KeyEventWatcher.swift b/KeyType/KeyEventWatcher.swift index 726815e..e67c90a 100644 --- a/KeyType/KeyEventWatcher.swift +++ b/KeyType/KeyEventWatcher.swift @@ -11,7 +11,7 @@ import Cocoa class KeyEventWatcher { private var keyCode: CGKeyCode? private let bundleId = Bundle.main.infoDictionary?["CFBundleIdentifier"] as? String - private let config = EventConverter(LRDvorak + KanaEisu + Emacs + Custom) + private let config = RemapFinder(LRDvorak + KanaEisu + Emacs + Custom) private var eventMaskToWatch: CGEventMask { let eventTypeList: [CGEventType] = [ diff --git a/KeyType/EventConverter.swift b/KeyType/RemapFinder.swift similarity index 94% rename from KeyType/EventConverter.swift rename to KeyType/RemapFinder.swift index bf631b8..d1caa21 100644 --- a/KeyType/EventConverter.swift +++ b/KeyType/RemapFinder.swift @@ -8,7 +8,7 @@ import Foundation -class EventConverter { +class RemapFinder { private var remapMap: [CGKeyCode: [Remap]] init(_ keyMappingList: KeyMapCollection) { @@ -27,6 +27,7 @@ class EventConverter { remapMap = remapList } + // TODO: return remap instead of CGEvent func getConvertedEvent(_ event: CGEvent) -> CGEvent? { let eventKeyCombination = KeyCombination(fromEvent: event) diff --git a/KeyTypeTests/EventConverterTests.swift b/KeyTypeTests/EventConverterTests.swift index 17659dc..625789d 100644 --- a/KeyTypeTests/EventConverterTests.swift +++ b/KeyTypeTests/EventConverterTests.swift @@ -64,7 +64,7 @@ class EventConverterTests: XCTestCase { } private func convert(_ collection: KeyMapCollection, key: Key, flags: CGEventFlags? = nil) -> CGEvent? { - let converter = EventConverter(collection) + let converter = RemapFinder(collection) let event = CGEvent( keyboardEventSource: nil, virtualKey: key.rawValue, From 1054054517781f501c28c5376d7cd61ccc115dbe Mon Sep 17 00:00:00 2001 From: Shimpei Otsubo Date: Mon, 24 Aug 2020 19:57:24 +0900 Subject: [PATCH 2/8] Separate conversion logic to EventConverter --- KeyType.xcodeproj/project.pbxproj | 4 ++ KeyType/EventConverter.swift | 63 +++++++++++++++++++++++++++++++ KeyType/KeyEventWatcher.swift | 51 +------------------------ 3 files changed, 69 insertions(+), 49 deletions(-) create mode 100644 KeyType/EventConverter.swift diff --git a/KeyType.xcodeproj/project.pbxproj b/KeyType.xcodeproj/project.pbxproj index cb846fa..caffaa7 100644 --- a/KeyType.xcodeproj/project.pbxproj +++ b/KeyType.xcodeproj/project.pbxproj @@ -19,6 +19,7 @@ 87DADDD824F1866100D79B36 /* KanaEisu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87DADDD724F1866100D79B36 /* KanaEisu.swift */; }; 87DADDDA24F1874600D79B36 /* LRDvorak.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87DADDD924F1874600D79B36 /* LRDvorak.swift */; }; 87DADDDC24F189A100D79B36 /* Emacs.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87DADDDB24F189A100D79B36 /* Emacs.swift */; }; + 87DADDDE24F3D1C600D79B36 /* EventConverter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87DADDDD24F3D1C600D79B36 /* EventConverter.swift */; }; 87EC00B31DE88D3D007C1F66 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87EC00B21DE88D3D007C1F66 /* AppDelegate.swift */; }; 87EC00B51DE88D3D007C1F66 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87EC00B41DE88D3D007C1F66 /* ViewController.swift */; }; 87EC00B71DE88D3D007C1F66 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 87EC00B61DE88D3D007C1F66 /* Assets.xcassets */; }; @@ -58,6 +59,7 @@ 87DADDD724F1866100D79B36 /* KanaEisu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KanaEisu.swift; sourceTree = ""; }; 87DADDD924F1874600D79B36 /* LRDvorak.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LRDvorak.swift; sourceTree = ""; }; 87DADDDB24F189A100D79B36 /* Emacs.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Emacs.swift; sourceTree = ""; }; + 87DADDDD24F3D1C600D79B36 /* EventConverter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventConverter.swift; sourceTree = ""; }; 87EC00AF1DE88D3D007C1F66 /* KeyType.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = KeyType.app; sourceTree = BUILT_PRODUCTS_DIR; }; 87EC00B21DE88D3D007C1F66 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 87EC00B41DE88D3D007C1F66 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; @@ -154,6 +156,7 @@ 87EC00B61DE88D3D007C1F66 /* Assets.xcassets */, 87EC00B81DE88D3D007C1F66 /* Main.storyboard */, 87EC00BB1DE88D3D007C1F66 /* Info.plist */, + 87DADDDD24F3D1C600D79B36 /* EventConverter.swift */, ); path = KeyType; sourceTree = ""; @@ -337,6 +340,7 @@ 8768503124F198E20021D517 /* Custom.swift in Sources */, 87EC00B51DE88D3D007C1F66 /* ViewController.swift in Sources */, 8701059A1DE97ADB00486507 /* RemapFinder.swift in Sources */, + 87DADDDE24F3D1C600D79B36 /* EventConverter.swift in Sources */, 87DADDDA24F1874600D79B36 /* LRDvorak.swift in Sources */, 870105961DE968CF00486507 /* Remap.swift in Sources */, 87EC00B31DE88D3D007C1F66 /* AppDelegate.swift in Sources */, diff --git a/KeyType/EventConverter.swift b/KeyType/EventConverter.swift new file mode 100644 index 0000000..dff4b38 --- /dev/null +++ b/KeyType/EventConverter.swift @@ -0,0 +1,63 @@ +// +// EventConverter.swift +// KeyType +// +// Created by Shimpei Otsubo on 2020/08/24. +// Copyright © 2020 Shimpei Otsubo. All rights reserved. +// + +import Foundation + +class EventConverter { + private let finder: RemapFinder + private var keyCode: CGKeyCode? + + init(finder: RemapFinder) { + self.finder = finder + } + + func eventCallback(proxy _: CGEventTapProxy, type: CGEventType, event: CGEvent) -> Unmanaged? { + switch type { + case .flagsChanged: + if event.isModiferKeyEvent() { + return event.isModiferKeyDownEvent() ? modifierKeyDown(event) : modifierKeyUp(event) + } else { + return Unmanaged.passRetained(event) + } + case .keyDown: + return keyDown(event) + case .keyUp: + return keyUp(event) + default: + keyCode = nil + return Unmanaged.passRetained(event) + } + } + + private func keyDown(_ event: CGEvent) -> Unmanaged? { + keyCode = nil + let event = finder.getConvertedEvent(event) ?? event + return Unmanaged.passRetained(event) + } + + private func keyUp(_ event: CGEvent) -> Unmanaged? { + keyCode = nil + let event = finder.getConvertedEvent(event) ?? event + return Unmanaged.passRetained(event) + } + + private func modifierKeyDown(_ event: CGEvent) -> Unmanaged? { + keyCode = event.keyCode + return Unmanaged.passRetained(event) + } + + private func modifierKeyUp(_ event: CGEvent) -> Unmanaged? { + if keyCode == event.keyCode { + if let convertedEvent = finder.getConvertedEvent(event) { + KeyCombination(fromEvent: convertedEvent).postEvent() + } + } + keyCode = nil + return Unmanaged.passRetained(event) + } +} diff --git a/KeyType/KeyEventWatcher.swift b/KeyType/KeyEventWatcher.swift index e67c90a..560346a 100644 --- a/KeyType/KeyEventWatcher.swift +++ b/KeyType/KeyEventWatcher.swift @@ -9,9 +9,7 @@ import Cocoa class KeyEventWatcher { - private var keyCode: CGKeyCode? - private let bundleId = Bundle.main.infoDictionary?["CFBundleIdentifier"] as? String - private let config = RemapFinder(LRDvorak + KanaEisu + Emacs + Custom) + private let config = EventConverter(finder: RemapFinder(LRDvorak + KanaEisu + Emacs + Custom)) private var eventMaskToWatch: CGEventMask { let eventTypeList: [CGEventType] = [ @@ -50,7 +48,7 @@ class KeyEventWatcher { func callback(proxy: CGEventTapProxy, type: CGEventType, event: CGEvent, refcon: UnsafeMutableRawPointer?) -> Unmanaged? { guard let observer = refcon else { return Unmanaged.passRetained(event) } let mySelf = Unmanaged.fromOpaque(observer).takeUnretainedValue() - return mySelf.eventCallback(proxy: proxy, type: type, event: event) + return mySelf.config.eventCallback(proxy: proxy, type: type, event: event) } let tap = CGEvent.tapCreate( @@ -64,49 +62,4 @@ class KeyEventWatcher { return tap } - - private func eventCallback(proxy _: CGEventTapProxy, type: CGEventType, event: CGEvent) -> Unmanaged? { - switch type { - case .flagsChanged: - if event.isModiferKeyEvent() { - return event.isModiferKeyDownEvent() ? modifierKeyDown(event) : modifierKeyUp(event) - } else { - return Unmanaged.passRetained(event) - } - case .keyDown: - return keyDown(event) - case .keyUp: - return keyUp(event) - default: - keyCode = nil - return Unmanaged.passRetained(event) - } - } - - private func keyDown(_ event: CGEvent) -> Unmanaged? { - keyCode = nil - let event = config.getConvertedEvent(event) ?? event - return Unmanaged.passRetained(event) - } - - private func keyUp(_ event: CGEvent) -> Unmanaged? { - keyCode = nil - let event = config.getConvertedEvent(event) ?? event - return Unmanaged.passRetained(event) - } - - private func modifierKeyDown(_ event: CGEvent) -> Unmanaged? { - keyCode = event.keyCode - return Unmanaged.passRetained(event) - } - - private func modifierKeyUp(_ event: CGEvent) -> Unmanaged? { - if keyCode == event.keyCode { - if let convertedEvent = config.getConvertedEvent(event) { - KeyCombination(fromEvent: convertedEvent).postEvent() - } - } - keyCode = nil - return Unmanaged.passRetained(event) - } } From 2945d70c805da355a45ebb2fe736aa4d4f72a2f5 Mon Sep 17 00:00:00 2001 From: Shimpei Otsubo Date: Mon, 24 Aug 2020 20:03:37 +0900 Subject: [PATCH 3/8] Not to use Unmanagged in EventConverter --- KeyType/EventConverter.swift | 22 +++++++++++----------- KeyType/KeyEventWatcher.swift | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/KeyType/EventConverter.swift b/KeyType/EventConverter.swift index dff4b38..b1d90cb 100644 --- a/KeyType/EventConverter.swift +++ b/KeyType/EventConverter.swift @@ -16,13 +16,13 @@ class EventConverter { self.finder = finder } - func eventCallback(proxy _: CGEventTapProxy, type: CGEventType, event: CGEvent) -> Unmanaged? { + func eventCallback(proxy _: CGEventTapProxy, type: CGEventType, event: CGEvent) -> CGEvent { switch type { case .flagsChanged: if event.isModiferKeyEvent() { return event.isModiferKeyDownEvent() ? modifierKeyDown(event) : modifierKeyUp(event) } else { - return Unmanaged.passRetained(event) + return event } case .keyDown: return keyDown(event) @@ -30,34 +30,34 @@ class EventConverter { return keyUp(event) default: keyCode = nil - return Unmanaged.passRetained(event) + return event } } - private func keyDown(_ event: CGEvent) -> Unmanaged? { + private func keyDown(_ event: CGEvent) -> CGEvent { keyCode = nil let event = finder.getConvertedEvent(event) ?? event - return Unmanaged.passRetained(event) + return event } - private func keyUp(_ event: CGEvent) -> Unmanaged? { + private func keyUp(_ event: CGEvent) -> CGEvent { keyCode = nil let event = finder.getConvertedEvent(event) ?? event - return Unmanaged.passRetained(event) + return event } - private func modifierKeyDown(_ event: CGEvent) -> Unmanaged? { + private func modifierKeyDown(_ event: CGEvent) -> CGEvent { keyCode = event.keyCode - return Unmanaged.passRetained(event) + return event } - private func modifierKeyUp(_ event: CGEvent) -> Unmanaged? { + private func modifierKeyUp(_ event: CGEvent) -> CGEvent { if keyCode == event.keyCode { if let convertedEvent = finder.getConvertedEvent(event) { KeyCombination(fromEvent: convertedEvent).postEvent() } } keyCode = nil - return Unmanaged.passRetained(event) + return event } } diff --git a/KeyType/KeyEventWatcher.swift b/KeyType/KeyEventWatcher.swift index 560346a..a6834fd 100644 --- a/KeyType/KeyEventWatcher.swift +++ b/KeyType/KeyEventWatcher.swift @@ -48,7 +48,7 @@ class KeyEventWatcher { func callback(proxy: CGEventTapProxy, type: CGEventType, event: CGEvent, refcon: UnsafeMutableRawPointer?) -> Unmanaged? { guard let observer = refcon else { return Unmanaged.passRetained(event) } let mySelf = Unmanaged.fromOpaque(observer).takeUnretainedValue() - return mySelf.config.eventCallback(proxy: proxy, type: type, event: event) + return Unmanaged.passRetained( mySelf.config.eventCallback(proxy: proxy, type: type, event: event)) } let tap = CGEvent.tapCreate( From 049abf053ce0e7d6b7d3d7982f297408f8f95587 Mon Sep 17 00:00:00 2001 From: Shimpei Otsubo Date: Mon, 24 Aug 2020 20:12:41 +0900 Subject: [PATCH 4/8] swiftlint autocorrect --- KeyType/EventConverter.swift | 6 +++--- KeyType/RemapFinder.swift | 2 +- KeyTypeTests/EventConverterTests.swift | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/KeyType/EventConverter.swift b/KeyType/EventConverter.swift index b1d90cb..3d2be4f 100644 --- a/KeyType/EventConverter.swift +++ b/KeyType/EventConverter.swift @@ -36,13 +36,13 @@ class EventConverter { private func keyDown(_ event: CGEvent) -> CGEvent { keyCode = nil - let event = finder.getConvertedEvent(event) ?? event + let event = finder.find(event) ?? event return event } private func keyUp(_ event: CGEvent) -> CGEvent { keyCode = nil - let event = finder.getConvertedEvent(event) ?? event + let event = finder.find(event) ?? event return event } @@ -53,7 +53,7 @@ class EventConverter { private func modifierKeyUp(_ event: CGEvent) -> CGEvent { if keyCode == event.keyCode { - if let convertedEvent = finder.getConvertedEvent(event) { + if let convertedEvent = finder.find(event) { KeyCombination(fromEvent: convertedEvent).postEvent() } } diff --git a/KeyType/RemapFinder.swift b/KeyType/RemapFinder.swift index d1caa21..80ca416 100644 --- a/KeyType/RemapFinder.swift +++ b/KeyType/RemapFinder.swift @@ -28,7 +28,7 @@ class RemapFinder { } // TODO: return remap instead of CGEvent - func getConvertedEvent(_ event: CGEvent) -> CGEvent? { + func find(_ event: CGEvent) -> CGEvent? { let eventKeyCombination = KeyCombination(fromEvent: event) guard let candidateRemaps = remapMap[eventKeyCombination.keyCode] else { diff --git a/KeyTypeTests/EventConverterTests.swift b/KeyTypeTests/EventConverterTests.swift index 625789d..15c14de 100644 --- a/KeyTypeTests/EventConverterTests.swift +++ b/KeyTypeTests/EventConverterTests.swift @@ -73,6 +73,6 @@ class EventConverterTests: XCTestCase { if let flags = flags { event.flags.insert(flags) } - return converter.getConvertedEvent(event) + return converter.find(event) } } From 41be4b50d2e290250b09a5646bf456742f765879 Mon Sep 17 00:00:00 2001 From: Shimpei Otsubo Date: Mon, 24 Aug 2020 20:12:47 +0900 Subject: [PATCH 5/8] swiftformat . --- KeyType/KeyEventWatcher.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/KeyType/KeyEventWatcher.swift b/KeyType/KeyEventWatcher.swift index a6834fd..40b7416 100644 --- a/KeyType/KeyEventWatcher.swift +++ b/KeyType/KeyEventWatcher.swift @@ -48,7 +48,7 @@ class KeyEventWatcher { func callback(proxy: CGEventTapProxy, type: CGEventType, event: CGEvent, refcon: UnsafeMutableRawPointer?) -> Unmanaged? { guard let observer = refcon else { return Unmanaged.passRetained(event) } let mySelf = Unmanaged.fromOpaque(observer).takeUnretainedValue() - return Unmanaged.passRetained( mySelf.config.eventCallback(proxy: proxy, type: type, event: event)) + return Unmanaged.passRetained(mySelf.config.eventCallback(proxy: proxy, type: type, event: event)) } let tap = CGEvent.tapCreate( From ca8c6fc0b5a082af2f7392a4bcbab79be043f857 Mon Sep 17 00:00:00 2001 From: Shimpei Otsubo Date: Mon, 24 Aug 2020 20:28:30 +0900 Subject: [PATCH 6/8] Simplify interface --- KeyType/EventConverter.swift | 2 +- KeyType/KeyEventWatcher.swift | 4 ++-- KeyTypeTests/EventConverterTests.swift | 5 +++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/KeyType/EventConverter.swift b/KeyType/EventConverter.swift index 3d2be4f..a9491d9 100644 --- a/KeyType/EventConverter.swift +++ b/KeyType/EventConverter.swift @@ -16,7 +16,7 @@ class EventConverter { self.finder = finder } - func eventCallback(proxy _: CGEventTapProxy, type: CGEventType, event: CGEvent) -> CGEvent { + func convert(type: CGEventType, event: CGEvent) -> CGEvent { switch type { case .flagsChanged: if event.isModiferKeyEvent() { diff --git a/KeyType/KeyEventWatcher.swift b/KeyType/KeyEventWatcher.swift index 40b7416..67d22c9 100644 --- a/KeyType/KeyEventWatcher.swift +++ b/KeyType/KeyEventWatcher.swift @@ -45,10 +45,10 @@ class KeyEventWatcher { private func eventTap() -> CFMachPort? { let observer = UnsafeMutableRawPointer(Unmanaged.passRetained(self).toOpaque()) - func callback(proxy: CGEventTapProxy, type: CGEventType, event: CGEvent, refcon: UnsafeMutableRawPointer?) -> Unmanaged? { + func callback(proxy _: CGEventTapProxy, type: CGEventType, event: CGEvent, refcon: UnsafeMutableRawPointer?) -> Unmanaged? { guard let observer = refcon else { return Unmanaged.passRetained(event) } let mySelf = Unmanaged.fromOpaque(observer).takeUnretainedValue() - return Unmanaged.passRetained(mySelf.config.eventCallback(proxy: proxy, type: type, event: event)) + return Unmanaged.passRetained(mySelf.config.convert(type: type, event: event)) } let tap = CGEvent.tapCreate( diff --git a/KeyTypeTests/EventConverterTests.swift b/KeyTypeTests/EventConverterTests.swift index 15c14de..618850b 100644 --- a/KeyTypeTests/EventConverterTests.swift +++ b/KeyTypeTests/EventConverterTests.swift @@ -64,7 +64,8 @@ class EventConverterTests: XCTestCase { } private func convert(_ collection: KeyMapCollection, key: Key, flags: CGEventFlags? = nil) -> CGEvent? { - let converter = RemapFinder(collection) + let finder = RemapFinder(collection) + let converter = EventConverter(finder: finder) let event = CGEvent( keyboardEventSource: nil, virtualKey: key.rawValue, @@ -73,6 +74,6 @@ class EventConverterTests: XCTestCase { if let flags = flags { event.flags.insert(flags) } - return converter.find(event) + return converter.eventCallback(type: .keyDown, event: event) } } From 80c78526d95c63643bdd585f503ff5ce7362dfda Mon Sep 17 00:00:00 2001 From: Shimpei Otsubo Date: Mon, 24 Aug 2020 21:43:02 +0900 Subject: [PATCH 7/8] Fix --- KeyTypeTests/EventConverterTests.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/KeyTypeTests/EventConverterTests.swift b/KeyTypeTests/EventConverterTests.swift index 618850b..d1d911e 100644 --- a/KeyTypeTests/EventConverterTests.swift +++ b/KeyTypeTests/EventConverterTests.swift @@ -74,6 +74,6 @@ class EventConverterTests: XCTestCase { if let flags = flags { event.flags.insert(flags) } - return converter.eventCallback(type: .keyDown, event: event) + return converter.convert(type: .keyDown, event: event) } } From 2173e3016939dfece2a1b374bfd2b6ff30e29dc0 Mon Sep 17 00:00:00 2001 From: Shimpei Otsubo Date: Mon, 24 Aug 2020 21:47:27 +0900 Subject: [PATCH 8/8] Fix tests --- KeyTypeTests/EventConverterTests.swift | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/KeyTypeTests/EventConverterTests.swift b/KeyTypeTests/EventConverterTests.swift index d1d911e..9594f4c 100644 --- a/KeyTypeTests/EventConverterTests.swift +++ b/KeyTypeTests/EventConverterTests.swift @@ -11,18 +11,17 @@ import XCTest class EventConverterTests: XCTestCase { func testLeftCommandToEisu() { - XCTAssert(convert(KanaEisu, key: Key.commandL)?.keyCode == Key.EISU.rawValue) + XCTAssert(convert(KanaEisu, key: Key.commandL).keyCode == Key.EISU.rawValue) } func testRightCommandToKana() { - XCTAssert(convert(KanaEisu, key: Key.commandR)?.keyCode == Key.KANA.rawValue) - XCTAssertNil(convert(KanaEisu, key: Key.A)) + XCTAssert(convert(KanaEisu, key: Key.commandR).keyCode == Key.KANA.rawValue) + XCTAssert(convert(KanaEisu, key: Key.A).keyCode == Key.A.rawValue) } func testNoTouch() { - XCTAssertNil(convert(KanaEisu, key: Key.A)) - XCTAssertNil(convert(KanaEisu, key: Key.A, flags: .maskCommand)) - XCTAssertNil(convert(KanaEisu, key: Key.commandR, flags: .maskCommand)) + XCTAssertTrue(convert(KanaEisu, key: Key.A, flags: .maskCommand).keyCode == Key.A.rawValue) + XCTAssertTrue(convert(KanaEisu, key: Key.commandR, flags: .maskCommand).keyCode == Key.commandR.rawValue) } func testWithoutSimple() { @@ -30,7 +29,7 @@ class EventConverterTests: XCTestCase { convert( [Remap(Key.A.without.option, to: Key.B.alone)], key: Key.A - )?.keyCode == Key.B.rawValue + ).keyCode == Key.B.rawValue ) } @@ -41,7 +40,7 @@ class EventConverterTests: XCTestCase { [Remap(Key.A.without.option, to: Key.B.alone)], key: Key.A, flags: CGEventFlags.maskShift - )?.keyCode == Key.B.rawValue + ).keyCode == Key.B.rawValue ) // with `shift` and `command` @@ -50,20 +49,20 @@ class EventConverterTests: XCTestCase { [Remap(Key.A.without.option, to: Key.B.alone)], key: Key.A, flags: CGEventFlags.maskShift.union(.maskCommand) - )?.keyCode == Key.B.rawValue + ).keyCode == Key.B.rawValue ) // key with `option` can never trigger the Remap - XCTAssertNil( + XCTAssertTrue( convert( [Remap(Key.A.with.shift.without.option, to: Key.B.alone)], key: Key.A, flags: CGEventFlags.maskShift.union(.maskAlternate) - ) + ).keyCode == Key.A.rawValue ) } - private func convert(_ collection: KeyMapCollection, key: Key, flags: CGEventFlags? = nil) -> CGEvent? { + private func convert(_ collection: KeyMapCollection, key: Key, flags: CGEventFlags? = nil) -> CGEvent { let finder = RemapFinder(collection) let converter = EventConverter(finder: finder) let event = CGEvent(