NSEvent // Add reinitiator.

This commit is contained in:
ShikiSuen 2022-09-05 22:58:44 +08:00
parent abbf94a2d7
commit 4b8f4785a9
3 changed files with 34 additions and 52 deletions

View File

@ -8,7 +8,36 @@
import Cocoa import Cocoa
// MARK: - NSEvent Extension // MARK: - NSEvent Extension - Reconstructors
extension NSEvent {
public func reinitiate(
with type: NSEvent.EventType? = nil,
location: NSPoint? = nil,
modifierFlags: NSEvent.ModifierFlags? = nil,
timestamp: TimeInterval? = nil,
windowNumber: Int? = nil,
characters: String? = nil,
charactersIgnoringModifiers: String? = nil,
isARepeat: Bool? = nil,
keyCode: UInt16? = nil
) -> NSEvent? {
NSEvent.keyEvent(
with: type ?? self.type,
location: location ?? locationInWindow,
modifierFlags: modifierFlags ?? self.modifierFlags,
timestamp: timestamp ?? self.timestamp,
windowNumber: windowNumber ?? self.windowNumber,
context: nil,
characters: characters ?? self.characters ?? "",
charactersIgnoringModifiers: charactersIgnoringModifiers ?? self.characters ?? "",
isARepeat: isARepeat ?? self.isARepeat,
keyCode: keyCode ?? self.keyCode
)
}
}
// MARK: - NSEvent Extension - InputSignalProtocol
extension NSEvent: InputSignalProtocol { extension NSEvent: InputSignalProtocol {
public var isASCIIModeInput: Bool { ctlInputMethod.isASCIIModeSituation } public var isASCIIModeInput: Bool { ctlInputMethod.isASCIIModeSituation }

View File

@ -226,20 +226,7 @@ class ctlInputMethod: IMKInputController {
// Shift+Enter delegate keyHandler // Shift+Enter delegate keyHandler
// Shift Flags // Shift Flags
if event.isShiftHold, event.isEnter { if event.isShiftHold, event.isEnter {
guard guard let newEvent = event.reinitiate(modifierFlags: []) else {
let newEvent = NSEvent.keyEvent(
with: event.type,
location: event.locationInWindow,
modifierFlags: [],
timestamp: event.timestamp,
windowNumber: event.windowNumber,
context: nil,
characters: event.characters ?? "",
charactersIgnoringModifiers: event.charactersIgnoringModifiers ?? event.characters ?? "",
isARepeat: event.isARepeat,
keyCode: event.keyCode
)
else {
NSSound.beep() NSSound.beep()
return true return true
} }
@ -249,20 +236,8 @@ class ctlInputMethod: IMKInputController {
// //
if let newChar = ctlCandidateIMK.defaultIMKSelectionKey[event.keyCode], event.isShiftHold, if let newChar = ctlCandidateIMK.defaultIMKSelectionKey[event.keyCode], event.isShiftHold,
isAssociatedPhrasesState isAssociatedPhrasesState, let newEvent = event.reinitiate(modifierFlags: [], characters: newChar)
{ {
let newEvent = NSEvent.keyEvent(
with: event.type,
location: event.locationInWindow,
modifierFlags: [],
timestamp: event.timestamp,
windowNumber: event.windowNumber,
context: nil,
characters: newChar,
charactersIgnoringModifiers: event.charactersIgnoringModifiers ?? event.characters ?? "",
isARepeat: event.isARepeat,
keyCode: event.keyCode
)
ctlCandidateCurrent.handleKeyboardEvent(newEvent) ctlCandidateCurrent.handleKeyboardEvent(newEvent)
} }

View File

@ -229,18 +229,7 @@ public class ctlCandidateIMK: IMKCandidates, ctlCandidateProtocol {
if let newChar = ctlCandidateIMK.defaultIMKSelectionKey[event.keyCode] { if let newChar = ctlCandidateIMK.defaultIMKSelectionKey[event.keyCode] {
/// KeyCode NSEvent Character /// KeyCode NSEvent Character
/// IMK /// IMK
let newEvent = NSEvent.keyEvent( let newEvent = event.reinitiate(characters: newChar)
with: event.type,
location: event.locationInWindow,
modifierFlags: event.modifierFlags,
timestamp: event.timestamp,
windowNumber: event.windowNumber,
context: nil,
characters: newChar,
charactersIgnoringModifiers: event.charactersIgnoringModifiers ?? event.characters ?? "",
isARepeat: event.isARepeat,
keyCode: event.keyCode
)
if let newEvent = newEvent { if let newEvent = newEvent {
if mgrPrefs.useSCPCTypingMode, delegate.isAssociatedPhrasesState { if mgrPrefs.useSCPCTypingMode, delegate.isAssociatedPhrasesState {
// input.isShiftHold ctlInputMethod.handle() // input.isShiftHold ctlInputMethod.handle()
@ -300,17 +289,6 @@ extension ctlCandidateIMK {
let mapNumPadKeyCodeTranslation: [UInt16: UInt16] = [ let mapNumPadKeyCodeTranslation: [UInt16: UInt16] = [
83: 18, 84: 19, 85: 20, 86: 21, 87: 23, 88: 22, 89: 26, 91: 28, 92: 25, 83: 18, 84: 19, 85: 20, 86: 21, 87: 23, 88: 22, 89: 26, 91: 28, 92: 25,
] ]
return NSEvent.keyEvent( return event.reinitiate(keyCode: mapNumPadKeyCodeTranslation[event.keyCode] ?? event.keyCode)
with: event.type,
location: event.locationInWindow,
modifierFlags: event.modifierFlags,
timestamp: event.timestamp,
windowNumber: event.windowNumber,
context: nil,
characters: event.characters ?? "",
charactersIgnoringModifiers: event.charactersIgnoringModifiers ?? event.characters ?? "",
isARepeat: event.isARepeat,
keyCode: mapNumPadKeyCodeTranslation[event.keyCode] ?? event.keyCode
)
} }
} }