IMKCandidates // Handle InputState.AssociatedPhrases.

This commit is contained in:
ShikiSuen 2022-08-14 10:40:12 +08:00
parent 1fbf7f0c72
commit 53dc7cc74b
2 changed files with 36 additions and 19 deletions

View File

@ -52,6 +52,10 @@ extension ctlInputMethod: KeyHandlerDelegate {
extension ctlInputMethod: ctlCandidateDelegate {
var isAssociatedPhrasesMode: Bool { state is InputState.AssociatedPhrases }
/// handle() IMK
/// handle()
/// - Parameter event: IMK
/// - Returns: `true` IMK`false`
func handleDelegateEvent(_ event: NSEvent!) -> Bool {
// Shift macOS 10.15 macOS
if #available(macOS 10.15, *) {
@ -100,7 +104,8 @@ extension ctlInputMethod: ctlCandidateDelegate {
/// 調
/// result bool IMK
let result = keyHandler.handleCandidate(state: state, input: input) { newState in
/// keyHandler.handleCandidate()
let result = keyHandler.handle(input: input, state: state) { newState in
self.handle(state: newState)
} errorCallback: {
clsSFX.beep()

View File

@ -244,6 +244,7 @@ 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 }
@ -280,25 +281,36 @@ public class ctlCandidateIMK: IMKCandidates, ctlCandidateProtocol {
moveDown(self)
}
}
} else if let newChar = defaultIMKSelectionKey[event.keyCode] {
/// KeyCode NSEvent Character
let newEvent = NSEvent.keyEvent(
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 {
/// NSEvent
super.interpretKeyEvents([newEvent])
}
} else {
if let newChar = defaultIMKSelectionKey[event.keyCode] {
/// KeyCode NSEvent Character
/// IMK
let newEvent = NSEvent.keyEvent(
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 {
/// NSEvent
eventArray = Array(eventArray.dropFirst(0))
eventArray.insert(newEvent, at: 0)
}
}
if delegate.isAssociatedPhrasesMode,
!input.isPageUp, !input.isPageDown, !input.isCursorForward, !input.isCursorBackward,
!input.isCursorClockLeft, !input.isCursorClockRight, !input.isSpace,
!input.isEnter || !mgrPrefs.alsoConfirmAssociatedCandidatesByEnter
{
_ = delegate.handleDelegateEvent(event)
return
}
super.interpretKeyEvents(eventArray)
}
}