InputHandler // Still use Shift key under certain candidate context.

This commit is contained in:
ShikiSuen 2023-06-20 19:17:57 +08:00
parent 78ce8aef1d
commit d98e17afaa
2 changed files with 23 additions and 14 deletions

View File

@ -8,6 +8,7 @@
/// InputHandler.HandleInput() /// InputHandler.HandleInput()
import AppKit
import Shared import Shared
import Tekkon import Tekkon
@ -16,10 +17,31 @@ extension InputHandler {
/// - Parameter input: /// - Parameter input:
/// - Returns: IMK /// - Returns: IMK
func handleComposition(input: InputSignalProtocol) -> Bool? { func handleComposition(input: InputSignalProtocol) -> Bool? {
guard let delegate = delegate else { return nil }
// //
guard !input.text.isEmpty, input.charCode.isPrintable else { return nil } guard !input.text.isEmpty, input.charCode.isPrintable else { return nil }
if isCodePointInputMode { return handleCodePointComposition(input: input) } if isCodePointInputMode { return handleCodePointComposition(input: input) }
if prefs.cassetteEnabled { return handleCassetteComposition(input: input) } if prefs.cassetteEnabled {
// `%quick`
var handleQuickCandidate = true
if currentLM.areCassetteCandidateKeysShiftPressed { handleQuickCandidate = input.isShiftHold }
let hasQuickCandidates: Bool = delegate.state.type == .ofInputting && delegate.state.isCandidateContainer
// `%symboldef`
if handleCassetteSymbolTable(input: input) {
return true
} else if hasQuickCandidates, input.text != currentLM.cassetteWildcardKey,
let itim = input.inputTextIgnoringModifiers,
let newEv = (input as? NSEvent)?.reinitiate(characters: itim)
{
// `%quick` `%symboldef`
guard !(handleQuickCandidate && handleCandidate(input: newEv)) else { return true }
} else {
// `%quick`
guard !(hasQuickCandidates && handleQuickCandidate && handleCandidate(input: input)) else { return true }
}
return handleCassetteComposition(input: input)
}
return handlePhonabetComposition(input: input) return handlePhonabetComposition(input: input)
} }

View File

@ -138,8 +138,6 @@ extension InputHandler {
return true return true
} }
// -----
// //
haninSymbolInput: if prefs.classicHaninKeyboardSymbolModeShortcutEnabled { haninSymbolInput: if prefs.classicHaninKeyboardSymbolModeShortcutEnabled {
guard let x = input.inputTextIgnoringModifiers, guard let x = input.inputTextIgnoringModifiers,
@ -148,15 +146,6 @@ extension InputHandler {
return handleHaninKeyboardSymbolModeToggle() return handleHaninKeyboardSymbolModeToggle()
} }
// `%symboldef`
if handleCassetteSymbolTable(input: input) { return true }
// `%quick`
var handleQuickCandidate = true
if currentLM.areCassetteCandidateKeysShiftPressed { handleQuickCandidate = input.isShiftHold }
let hasQuickCandidates: Bool = state.type == .ofInputting && state.isCandidateContainer
guard !(hasQuickCandidates && handleQuickCandidate && handleCandidate(input: input)) else { return true }
// //
if isHaninKeyboardSymbolMode, [[], .shift].contains(input.modifierFlags) { if isHaninKeyboardSymbolMode, [[], .shift].contains(input.modifierFlags) {
return handleHaninKeyboardSymbolModeInput(input: input) return handleHaninKeyboardSymbolModeInput(input: input)
@ -164,8 +153,6 @@ extension InputHandler {
return compositionHandled return compositionHandled
} }
// -----
// //
if callCandidateState(input: input) { return true } if callCandidateState(input: input) { return true }