ctlIME // Optimize signal flow used in handle(event:).

This commit is contained in:
ShikiSuen 2022-09-11 10:08:05 +08:00
parent 3987cad35e
commit e417be73bb
2 changed files with 43 additions and 28 deletions

View File

@ -30,4 +30,41 @@ extension ctlInputMethod {
} }
return result return result
} }
/// handle() IMK
/// handle()
/// - Parameter event: IMK
/// - Returns: `true` IMK`false`
func imkCandidatesEventHandler(event eventToDeal: NSEvent) -> Bool? {
// IMK IMK
// interpretKeyEvents()
// - super.interpretKeyEvents()
// - delegate ctlInputMethod KeyHandler
if let imkCandidates = ctlInputMethod.ctlCandidateCurrent as? ctlCandidateIMK, imkCandidates.visible {
let event: NSEvent = ctlCandidateIMK.replaceNumPadKeyCodes(target: eventToDeal) ?? eventToDeal
// Shift+Enter delegate keyHandler
// Shift Flags
if event.isShiftHold, event.isEnter {
guard let newEvent = event.reinitiate(modifierFlags: []) else {
NSSound.beep()
return true
}
imkCandidates.interpretKeyEvents([newEvent])
return true
}
//
if let newChar = ctlCandidateIMK.defaultIMKSelectionKey[event.keyCode],
event.isShiftHold, isAssociatedPhrasesState,
let newEvent = event.reinitiate(modifierFlags: [], characters: newChar)
{
imkCandidates.handleKeyboardEvent(newEvent)
}
imkCandidates.interpretKeyEvents([event])
return true
}
return nil
}
} }

View File

@ -230,6 +230,7 @@ class ctlInputMethod: IMKInputController {
} }
}() }()
/// event event var Shift
if #available(macOS 10.15, *) { if #available(macOS 10.15, *) {
if ShiftKeyUpChecker.check(event), !mgrPrefs.disableShiftTogglingAlphanumericalMode { if ShiftKeyUpChecker.check(event), !mgrPrefs.disableShiftTogglingAlphanumericalMode {
if !shouldUseShiftToggleHandle || (!rencentKeyHandledByKeyHandlerEtc && shouldUseShiftToggleHandle) { if !shouldUseShiftToggleHandle || (!rencentKeyHandledByKeyHandlerEtc && shouldUseShiftToggleHandle) {
@ -271,38 +272,15 @@ class ctlInputMethod: IMKInputController {
ctlInputMethod.areWeNerfing = eventToDeal.modifierFlags.contains([.shift, .command]) ctlInputMethod.areWeNerfing = eventToDeal.modifierFlags.contains([.shift, .command])
// IMK IMK // IMK IMK
// interpretKeyEvents() if let result = imkCandidatesEventHandler(event: eventToDeal) {
// - super.interpretKeyEvents() if shouldUseShiftToggleHandle {
// - delegate ctlInputMethod KeyHandler rencentKeyHandledByKeyHandlerEtc = result
proc: if let ctlCandidateCurrent = ctlInputMethod.ctlCandidateCurrent as? ctlCandidateIMK {
guard ctlCandidateCurrent.visible else { break proc }
var event: NSEvent = ctlCandidateIMK.replaceNumPadKeyCodes(target: eventToDeal) ?? eventToDeal
// Shift+Enter delegate keyHandler
// Shift Flags
if event.isShiftHold, event.isEnter {
guard let newEvent = event.reinitiate(modifierFlags: []) else {
NSSound.beep()
return true
} }
ctlCandidateCurrent.interpretKeyEvents([newEvent]) return result
return true
} }
// /// NSEvent commonEventHandler
if let newChar = ctlCandidateIMK.defaultIMKSelectionKey[event.keyCode], event.isShiftHold,
isAssociatedPhrasesState, let newEvent = event.reinitiate(modifierFlags: [], characters: newChar)
{
ctlCandidateCurrent.handleKeyboardEvent(newEvent)
}
ctlCandidateCurrent.interpretKeyEvents([event])
return true
}
/// commonEventHandler
/// IMK 便 /// IMK 便
/// event event var Shift
let result = commonEventHandler(eventToDeal) let result = commonEventHandler(eventToDeal)
if shouldUseShiftToggleHandle { if shouldUseShiftToggleHandle {
rencentKeyHandledByKeyHandlerEtc = result rencentKeyHandledByKeyHandlerEtc = result