InputHandler // Improve conditioning of triggering candidate window. (#209)

This commit is contained in:
ShikiSuen 2022-10-27 18:35:03 +08:00
parent 064b2fbe7d
commit 7c4f141286
2 changed files with 27 additions and 25 deletions

View File

@ -192,6 +192,7 @@ extension IMEState {
}
}
/// InputHandler 使 !compositor.isEmpty
public var hasComposition: Bool {
switch type {
case .ofNotEmpty, .ofInputting, .ofMarking, .ofCandidates: return true

View File

@ -114,33 +114,13 @@ extension InputHandler {
// MARK: (Calling candidate window using Up / Down or PageUp / PageDn.)
candidateWindowProcessing: if state.hasComposition, isComposerOrCalligrapherEmpty, !input.isOptionHold,
input.isCursorClockLeft || input.isCursorClockRight || input.isSpace
// state.hasComposition
// !input.isFunctionKeyHold
if state.hasComposition, !compositor.isEmpty, isComposerOrCalligrapherEmpty,
!input.isOptionHold, !input.isShiftHold, !input.isCommandHold, !input.isControlHold,
input.isCursorClockLeft || input.isCursorClockRight || (input.isSpace && prefs.chooseCandidateUsingSpace)
|| input.isPageDown || input.isPageUp || (input.isTab && prefs.specifyShiftTabKeyBehavior)
{
if input.isSpace {
/// Space
if !prefs.chooseCandidateUsingSpace {
if compositor.cursor < compositor.length, compositor.insertKey(" ") {
walk()
// App
let textToCommit = commitOverflownComposition
var inputting = generateStateOfInputting()
inputting.textToCommit = textToCommit
delegate.switchState(inputting)
} else {
let displayedText = state.displayedText
if !displayedText.isEmpty {
delegate.switchState(IMEState.ofCommitting(textToCommit: displayedText))
}
delegate.switchState(IMEState.ofCommitting(textToCommit: " "))
}
return true
} else if input.isShiftHold { // Tab Shift+Command+Space /
return rotateCandidate(reverseOrder: input.isCommandHold)
}
}
if compositor.isEmpty { break candidateWindowProcessing }
//
let candidateState: IMEStateProtocol = generateStateOfCandidates()
_ = candidateState.candidates.isEmpty ? delegate.callError("3572F238") : delegate.switchState(candidateState)
@ -174,6 +154,27 @@ extension InputHandler {
? handleCtrlOptionCommandEnter()
: handleCtrlCommandEnter())
: handleEnter()
case .kSpace: // Space
// Tab Shift+Command+Space /
if input.isShiftHold { return rotateCandidate(reverseOrder: input.isCommandHold) }
//
do {
if compositor.cursor < compositor.length, compositor.insertKey(" ") {
walk()
// App
let textToCommit = commitOverflownComposition
var inputting = generateStateOfInputting()
inputting.textToCommit = textToCommit
delegate.switchState(inputting)
} else {
let displayedText = state.displayedText
if !displayedText.isEmpty {
delegate.switchState(IMEState.ofCommitting(textToCommit: displayedText))
}
delegate.switchState(IMEState.ofCommitting(textToCommit: " "))
}
return true
}
default: break
}
}