Repo // Move certain vertical-cases from IMEState to SessionCtl.

- InputHandler // Fix a case which should use delegate.isVerticalTyping.
This commit is contained in:
ShikiSuen 2022-12-23 12:49:43 +08:00
parent dba312b16e
commit 1305ce2a26
9 changed files with 11 additions and 24 deletions

View File

@ -12,9 +12,6 @@ import Cocoa
public protocol IMEStateProtocol {
var type: StateType { get }
var data: IMEStateDataProtocol { get set }
var isASCIIMode: Bool { get set }
var isVerticalTyping: Bool { get set }
var isVerticalCandidateWindow: Bool { get set }
var candidates: [([String], String)] { get set }
var hasComposition: Bool { get }
var isCandidateContainer: Bool { get }
@ -47,7 +44,6 @@ public protocol IMEStateDataProtocol {
var markedReadings: [String] { get set }
var displayTextSegments: [String] { get set }
var isFilterable: Bool { get }
var isVerticalTyping: Bool { get set }
var isMarkedLengthValid: Bool { get }
var candidates: [([String], String)] { get set }
var displayedText: String { get set }

View File

@ -47,12 +47,9 @@ public struct IMEState: IMEStateProtocol {
public var type: StateType = .ofEmpty
public var data: IMEStateDataProtocol = IMEStateData() as IMEStateDataProtocol
public var node: CandidateNode = .init(name: "")
public var isASCIIMode = false
public var isVerticalCandidateWindow = false
init(_ data: IMEStateDataProtocol = IMEStateData() as IMEStateDataProtocol, type: StateType = .ofEmpty) {
self.data = data
self.type = type
isVerticalTyping = SessionCtl.isVerticalTyping
}
///
@ -174,7 +171,6 @@ extension IMEState {
if type == .ofInputting { return self }
var result = Self.ofInputting(displayTextSegments: data.displayTextSegments, cursor: data.cursor)
result.tooltip = data.tooltipBackupForInputting
result.isVerticalTyping = isVerticalTyping
return result
}
@ -209,11 +205,6 @@ extension IMEState {
}
}
public var isVerticalTyping: Bool {
get { data.isVerticalTyping }
set { data.isVerticalTyping = newValue }
}
public var isCandidateContainer: Bool {
switch type {
case .ofCandidates, .ofAssociates, .ofSymbolTable: return true

View File

@ -75,7 +75,6 @@ public struct IMEStateData: IMEStateDataProtocol {
// MARK: Other data for non-empty states.
public var isVerticalTyping = false
public var markedTargetExists: Bool {
let pair = userPhraseKVPair
return LMMgr.checkIfUserPhraseExist(
@ -190,7 +189,7 @@ extension IMEStateData {
var subNeta = subNeta
if !PrefMgr.shared.cassetteEnabled {
if PrefMgr.shared.showHanyuPinyinInCompositionBuffer,
PrefMgr.shared.alwaysShowTooltipTextsHorizontally || !isVerticalTyping
PrefMgr.shared.alwaysShowTooltipTextsHorizontally || !SessionCtl.isVerticalTyping
{
// ->->調
subNeta = Tekkon.restoreToneOneInPhona(target: subNeta)

View File

@ -56,6 +56,7 @@ extension InputHandlerProtocol {
/// InputHandler
public protocol InputHandlerDelegate {
var isASCIIMode: Bool { get }
var isVerticalTyping: Bool { get }
var selectionKeys: String { get }
var state: IMEStateProtocol { get set }

View File

@ -51,12 +51,12 @@ extension InputHandler {
/// Caps Lock
/// Caps Lock
if input.isCapsLockOn || state.isASCIIMode {
if input.isCapsLockOn || delegate.isASCIIMode {
// macOS 12 CapsLock .ofEmpty()
delegate.switchState(IMEState.ofEmpty())
// Shift
if (input.isUpperCaseASCIILetterKey && state.isASCIIMode)
if (input.isUpperCaseASCIILetterKey && delegate.isASCIIMode)
|| (input.isCapsLockOn && input.isShiftHold)
{
return false

View File

@ -735,11 +735,12 @@ extension InputHandler {
candidate: candidates[currentIndex], respectCursorPushing: false,
preConsolidate: false, skipObservation: true
)
delegate.updateVerticalTypingStatus()
var newState = generateStateOfInputting()
newState.tooltip = (currentIndex + 1).description + " / " + candidates.count.description + " "
vCLog(newState.tooltip)
if #available(macOS 10.13, *) {
if delegate.state.isVerticalTyping, Bundle.main.preferredLocalizations[0] != "en" {
if delegate.isVerticalTyping, Bundle.main.preferredLocalizations[0] != "en" {
let locID = Bundle.main.preferredLocalizations[0]
newState.tooltip = (currentIndex + 1).i18n(loc: locID) + "" + candidates.count.i18n(loc: locID) + ""
}

View File

@ -114,6 +114,9 @@ public class SessionCtl: IMKInputController {
isVerticalTyping = result
}
///
public var isVerticalCandidateWindow = false
/// InputMode
/// IME UserPrefs
public var inputMode: Shared.InputMode = IMEApp.currentInputMode {

View File

@ -75,7 +75,7 @@ extension SessionCtl {
public func showCandidates() {
guard let client = client() else { return }
updateVerticalTypingStatus()
state.isVerticalCandidateWindow = (isVerticalTyping || !PrefMgr.shared.useHorizontalCandidateList)
isVerticalCandidateWindow = (isVerticalTyping || !PrefMgr.shared.useHorizontalCandidateList)
/// IMK
let candidateLayout: NSUserInterfaceLayoutOrientation =

View File

@ -32,10 +32,6 @@ extension SessionCtl {
return handle(event, client: client)
}
//
state.isASCIIMode = isASCIIMode
state.isVerticalTyping = isVerticalTyping
// NSEvent nilApple InputMethodKit
// client()
guard let event = event, sender is IMKTextInput else {
@ -125,7 +121,7 @@ extension SessionCtl {
// 使 NSEvent Emacs NSEvent NSEvent
if eventToDeal.isEmacsKey {
let verticalProcessing = (state.isCandidateContainer) ? state.isVerticalCandidateWindow : state.isVerticalTyping
let verticalProcessing = (state.isCandidateContainer) ? isVerticalCandidateWindow : isVerticalTyping
eventToDeal = eventToDeal.convertFromEmacsKeyEvent(isVerticalContext: verticalProcessing)
}