Repo // Optimizing IMKCandidates experiences with SCPC mode.

This commit is contained in:
ShikiSuen 2022-08-17 19:12:50 +08:00
parent ca98961e45
commit a5b061e2fc
2 changed files with 31 additions and 8 deletions

View File

@ -235,6 +235,25 @@ class ctlInputMethod: IMKInputController {
ctlCandidateCurrent.interpretKeyEvents([newEvent])
return true
}
if let newChar = ctlCandidateIMK.defaultIMKSelectionKey[event.keyCode], input.isShiftHold,
isAssociatedPhrasesState
{
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.perform(Selector(("handleKeyboardEvent:")), with: newEvent)
}
ctlCandidateCurrent.interpretKeyEvents([event])
return true
}

View File

@ -11,7 +11,7 @@ import InputMethodKit
public class ctlCandidateIMK: IMKCandidates, ctlCandidateProtocol {
public var currentLayout: CandidateLayout = .horizontal
private let defaultIMKSelectionKey: [UInt16: String] = [
public static let defaultIMKSelectionKey: [UInt16: String] = [
18: "1", 19: "2", 20: "3", 21: "4", 23: "5", 22: "6", 26: "7", 28: "8", 25: "9",
]
public weak var delegate: ctlCandidateDelegate? {
@ -241,7 +241,6 @@ public class ctlCandidateIMK: IMKCandidates, ctlCandidateProtocol {
//
// Objective-C nil
guard !eventArray.isEmpty else { return }
var eventArray = eventArray
let event = eventArray[0]
let input = InputSignal(event: event)
guard let delegate = delegate else { return }
@ -279,7 +278,7 @@ public class ctlCandidateIMK: IMKCandidates, ctlCandidateProtocol {
}
}
} else {
if let newChar = defaultIMKSelectionKey[event.keyCode] {
if let newChar = ctlCandidateIMK.defaultIMKSelectionKey[event.keyCode] {
/// KeyCode NSEvent Character
/// IMK
let newEvent = NSEvent.keyEvent(
@ -295,12 +294,17 @@ public class ctlCandidateIMK: IMKCandidates, ctlCandidateProtocol {
keyCode: event.keyCode
)
if let newEvent = newEvent {
/// NSEvent
eventArray = Array(eventArray.dropFirst(0))
eventArray.insert(newEvent, at: 0)
if mgrPrefs.useSCPCTypingMode, delegate.isAssociatedPhrasesState {
// input.isShiftHold ctlInputMethod.handle()
if !input.isShiftHold {
_ = delegate.sharedEventHandler(event)
return
}
} else {
perform(Selector(("handleKeyboardEvent:")), with: newEvent)
return
}
}
perform(Selector(("handleKeyboardEvent:")), with: newEvent)
return
}
if mgrPrefs.useSCPCTypingMode {