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 { public var hasComposition: Bool {
switch type { switch type {
case .ofNotEmpty, .ofInputting, .ofMarking, .ofCandidates: return true 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.) // MARK: (Calling candidate window using Up / Down or PageUp / PageDn.)
candidateWindowProcessing: if state.hasComposition, isComposerOrCalligrapherEmpty, !input.isOptionHold, // state.hasComposition
input.isCursorClockLeft || input.isCursorClockRight || input.isSpace // !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) || 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() let candidateState: IMEStateProtocol = generateStateOfCandidates()
_ = candidateState.candidates.isEmpty ? delegate.callError("3572F238") : delegate.switchState(candidateState) _ = candidateState.candidates.isEmpty ? delegate.callError("3572F238") : delegate.switchState(candidateState)
@ -174,6 +154,27 @@ extension InputHandler {
? handleCtrlOptionCommandEnter() ? handleCtrlOptionCommandEnter()
: handleCtrlCommandEnter()) : handleCtrlCommandEnter())
: handleEnter() : 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 default: break
} }
} }