InputHandler // Fix markers for .ofCandidates().

This commit is contained in:
ShikiSuen 2023-06-28 09:30:05 +08:00
parent 3c8fe42f9f
commit a7e3013a1f
2 changed files with 20 additions and 5 deletions

View File

@ -428,10 +428,18 @@ public class InputHandler: InputHandlerProtocol {
preConsolidate: PrefMgr.shared.consolidateContextOnCandidateSelection,
skipObservation: true
)
let inputting = generateStateOfInputting(sansReading: true)
theState.data.displayTextSegments = inputting.data.displayTextSegments
theState.data.cursor = inputting.cursor
theState.data.marker = inputting.marker
theState.data.displayTextSegments = compositor.walkedNodes.values
theState.data.cursor = convertCursorForDisplay(compositor.cursor)
let markerBackup = compositor.marker
if compositor.cursor == compositor.length {
compositor.jumpCursorBySpan(to: .rear, isMarker: true)
} else if compositor.cursor == 0 {
compositor.jumpCursorBySpan(to: .front, isMarker: true)
} else {
compositor.jumpCursorBySpan(to: prefs.useRearCursorMode ? .front : .rear, isMarker: true)
}
theState.data.marker = compositor.marker
compositor.marker = markerBackup
delegate.state = theState // switchState
delegate.setInlineDisplayWithCursor()
delegate.updatePopupDisplayWithCursor()

View File

@ -124,11 +124,18 @@ extension InputHandler {
///
/// - Returns:
public func generateStateOfCandidates() -> IMEStateProtocol {
IMEState.ofCandidates(
var result = IMEState.ofCandidates(
candidates: generateArrayOfCandidates(fixOrder: prefs.useFixecCandidateOrderOnSelection),
displayTextSegments: compositor.walkedNodes.values,
cursor: delegate?.state.cursor ?? generateStateOfInputting().cursor
)
if !prefs.useRearCursorMode {
let markerBackup = compositor.marker
compositor.jumpCursorBySpan(to: .rear, isMarker: true)
result.marker = compositor.marker
compositor.marker = markerBackup
}
return result
}
// MARK: -