From a09dc41c8bdf3b2ffc7e577e6adef35728b427c2 Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Tue, 23 Aug 2022 21:57:07 +0800 Subject: [PATCH] mgrPrefs // Fix odd preference data passed by defaults.write. --- Source/Modules/IMEModules/mgrPrefs.swift | 52 +++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/Source/Modules/IMEModules/mgrPrefs.swift b/Source/Modules/IMEModules/mgrPrefs.swift index f48a5ce7..849b865a 100644 --- a/Source/Modules/IMEModules/mgrPrefs.swift +++ b/Source/Modules/IMEModules/mgrPrefs.swift @@ -80,6 +80,8 @@ private let kMaxCandidateListTextSize: CGFloat = 196 private let kDefaultKeys = "123456789" +private let kDefaultBasicKeyboardLayout = "com.apple.keylayout.ZhuyinBopomofo" + // MARK: - UserDefaults extension. extension UserDefaults { @@ -362,7 +364,7 @@ public enum mgrPrefs { } @UserDefault( - key: UserDef.kBasicKeyboardLayout.rawValue, defaultValue: "com.apple.keylayout.ZhuyinBopomofo" + key: UserDef.kBasicKeyboardLayout.rawValue, defaultValue: kDefaultBasicKeyboardLayout ) static var basicKeyboardLayout: String @@ -709,6 +711,54 @@ extension mgrPrefs { mgrPrefs.disableShiftTogglingAlphanumericalMode = false mgrPrefs.togglingAlphanumericalModeWithLShift = false } + // 介面語言選項糾錯。 + var filteredAppleLanguages = Set() + appleLanguages.forEach { + if IME.arrSupportedLocales.contains($0) { + filteredAppleLanguages.insert($0) + } + } + if !filteredAppleLanguages.isEmpty { + appleLanguages = Array(filteredAppleLanguages) + } else { + UserDefaults.standard.removeObject(forKey: UserDef.kAppleLanguages.rawValue) + } + // 注拼槽注音排列選項糾錯。 + var isMandarinParserOptionValid = false + MandarinParser.allCases.forEach { + if $0.rawValue == mandarinParser { isMandarinParserOptionValid = true } + } + if !isMandarinParserOptionValid { + mandarinParser = 0 + } + // 基礎鍵盤排列選項糾錯。 + var inputSourceTIS: TISInputSource? { + var result: TISInputSource? + let list = TISCreateInputSourceList(nil, true).takeRetainedValue() as! [TISInputSource] + let matchedTISString = mgrPrefs.basicKeyboardLayout + for source in list { + guard let ptrCat = TISGetInputSourceProperty(source, kTISPropertyInputSourceCategory) else { continue } + let category = Unmanaged.fromOpaque(ptrCat).takeUnretainedValue() + guard category == kTISCategoryKeyboardInputSource else { continue } + guard let ptrSourceID = TISGetInputSourceProperty(source, kTISPropertyInputSourceID) else { continue } + let sourceID = String(Unmanaged.fromOpaque(ptrSourceID).takeUnretainedValue()) + if sourceID == matchedTISString { result = source } + } + return result + } + if inputSourceTIS == nil { + mgrPrefs.basicKeyboardLayout = kDefaultBasicKeyboardLayout + } + // 其它多元選項參數自動糾錯。 + if ![0, 1, 2].contains(specifyIntonationKeyBehavior) { + specifyIntonationKeyBehavior = 0 + } + if ![0, 1, 2].contains(specifyShiftBackSpaceKeyBehavior) { + specifyShiftBackSpaceKeyBehavior = 0 + } + if ![0, 1, 2].contains(upperCaseLetterKeyBehavior) { + upperCaseLetterKeyBehavior = 0 + } } }