From 54c1e60d7e3c42464d36fd6976aaa5305f1cd1c3 Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Thu, 26 Oct 2023 21:46:31 +0800 Subject: [PATCH] MainAssembly // Bind two new UserDef items. --- .../Sources/MainAssembly/InputHandler_HandleStates.swift | 7 ++++--- .../Sources/MainAssembly/SessionCtl_HandleEvent.swift | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/Packages/vChewing_MainAssembly/Sources/MainAssembly/InputHandler_HandleStates.swift b/Packages/vChewing_MainAssembly/Sources/MainAssembly/InputHandler_HandleStates.swift index f85f7ba7..d1d3661c 100644 --- a/Packages/vChewing_MainAssembly/Sources/MainAssembly/InputHandler_HandleStates.swift +++ b/Packages/vChewing_MainAssembly/Sources/MainAssembly/InputHandler_HandleStates.swift @@ -1019,7 +1019,8 @@ extension InputHandler { /// - Returns: 告知 IMK「該按鍵是否已經被輸入法攔截處理」。 func handleCapsLockAndAlphanumericalMode(input: InputSignalProtocol) -> Bool? { guard let delegate = delegate else { return nil } - guard input.isCapsLockOn || delegate.isASCIIMode else { return nil } + let handleCapsLock = !PrefMgr.shared.bypassNonAppleCapsLockHandling && input.isCapsLockOn + guard handleCapsLock || delegate.isASCIIMode else { return nil } // 低於 macOS 12 的系統無法偵測 CapsLock 的啟用狀態, // 所以這裡一律強制重置狀態為 .ofEmpty()。 @@ -1027,13 +1028,13 @@ extension InputHandler { // 字母鍵摁 Shift 的話,無須額外處理,因為直接就會敲出大寫字母。 if (input.isUpperCaseASCIILetterKey && delegate.isASCIIMode) - || (input.isCapsLockOn && input.isShiftHold) + || (handleCapsLock && input.isShiftHold) { return false } // 不再讓威注音處理由 Shift 切換到的英文模式的按鍵輸入。 - if delegate.isASCIIMode, !input.isCapsLockOn { return false } + if delegate.isASCIIMode, !handleCapsLock { return false } /// 如果是 ASCII 當中的不可列印的字元的話, /// 不使用「insertText:replacementRange:」。 diff --git a/Packages/vChewing_MainAssembly/Sources/MainAssembly/SessionCtl_HandleEvent.swift b/Packages/vChewing_MainAssembly/Sources/MainAssembly/SessionCtl_HandleEvent.swift index c2f28df5..688dbe0b 100644 --- a/Packages/vChewing_MainAssembly/Sources/MainAssembly/SessionCtl_HandleEvent.swift +++ b/Packages/vChewing_MainAssembly/Sources/MainAssembly/SessionCtl_HandleEvent.swift @@ -82,7 +82,7 @@ public extension SessionCtl { if event.type == .flagsChanged, event.keyCode == KeyCode.kCapsLock.rawValue { DispatchQueue.main.async { [weak self] in let isCapsLockTurnedOn = Self.isCapsLocked - if !isCapsLockTurnedOn, self?.isASCIIMode ?? false { + if PrefMgr.shared.shiftEisuToggleOffTogetherWithCapsLock, !isCapsLockTurnedOn, self?.isASCIIMode ?? false { self?.isASCIIMode.toggle() } guard PrefMgr.shared.showNotificationsWhenTogglingCapsLock else { return } @@ -194,7 +194,7 @@ public extension SessionCtl { ? NSLocalizedString("Alphanumerical Input Mode", comment: "") + "\n" + status : NSLocalizedString("Chinese Input Mode", comment: "") + "\n" + status ) - if oldValue, !newValue, Self.isCapsLocked { + if PrefMgr.shared.shiftEisuToggleOffTogetherWithCapsLock, oldValue, !newValue, Self.isCapsLocked { CapsLockToggler.turnOff() } }