PrefMgr // Split its extension to a standalone file.

This commit is contained in:
ShikiSuen 2022-09-21 18:08:06 +08:00
parent 0477c6e2da
commit 7d05bcf1ff
3 changed files with 69 additions and 57 deletions

View File

@ -11,14 +11,13 @@
import Shared import Shared
import SwiftExtension import SwiftExtension
private let kDefaultKeys = "123456789"
private let kDefaultBasicKeyboardLayout = "com.apple.keylayout.ZhuyinBopomofo"
private let kDefaultAlphanumericalKeyboardLayout = "com.apple.keylayout.ABC"
// MARK: - // MARK: -
public class PrefMgr: PrefMgrProtocol { public class PrefMgr: PrefMgrProtocol {
public static let shared = PrefMgr() public static let shared = PrefMgr()
public static let kDefaultCandidateKeys = "123456789"
public static let kDefaultBasicKeyboardLayout = "com.apple.keylayout.ZhuyinBopomofo"
public static let kDefaultAlphanumericalKeyboardLayout = "com.apple.keylayout.ABC"
// MARK: - Settings (Tier 1) // MARK: - Settings (Tier 1)
@ -233,11 +232,11 @@ public class PrefMgr: PrefMgrProtocol {
@AppProperty(key: UserDef.kCandidateKeyLabelFontName.rawValue, defaultValue: "") @AppProperty(key: UserDef.kCandidateKeyLabelFontName.rawValue, defaultValue: "")
public var candidateKeyLabelFontName: String public var candidateKeyLabelFontName: String
@AppProperty(key: UserDef.kCandidateKeys.rawValue, defaultValue: kDefaultKeys) @AppProperty(key: UserDef.kCandidateKeys.rawValue, defaultValue: kDefaultCandidateKeys)
public var candidateKeys: String { public var candidateKeys: String {
didSet { didSet {
if useIMKCandidateWindow { if useIMKCandidateWindow {
candidateKeys = kDefaultKeys candidateKeys = Self.kDefaultCandidateKeys
} }
} }
} }
@ -293,50 +292,3 @@ public class PrefMgr: PrefMgrProtocol {
@AppProperty(key: UserDef.kUsingHotKeyCurrencyNumerals.rawValue, defaultValue: true) @AppProperty(key: UserDef.kUsingHotKeyCurrencyNumerals.rawValue, defaultValue: true)
public var usingHotKeyCurrencyNumerals: Bool public var usingHotKeyCurrencyNumerals: Bool
} }
// MARK: Auto parameter fix procedures, executed everytime on ctlInputMethod.activateServer().
extension PrefMgr {
public func fixOddPreferences() {
// macOS 10.11 IMK macOS 10.13 IMK
// IMK macOS 10.09
// macOS 10.14 IMKCandidates
if #unavailable(macOS 10.13) { useIMKCandidateWindow = false }
if #unavailable(macOS 10.15) {
handleDefaultCandidateFontsByLangIdentifier = false
shiftKeyAccommodationBehavior = 0
disableShiftTogglingAlphanumericalMode = false
togglingAlphanumericalModeWithLShift = false
}
//
clientsIMKTextInputIncapable = Array(Set(clientsIMKTextInputIncapable)).sorted()
//
var isKeyboardParserOptionValid = false
KeyboardParser.allCases.forEach {
if $0.rawValue == keyboardParser { isKeyboardParserOptionValid = true }
}
if !isKeyboardParserOptionValid {
keyboardParser = 0
}
//
if TISInputSource.generate(from: basicKeyboardLayout) == nil {
basicKeyboardLayout = kDefaultBasicKeyboardLayout
}
if TISInputSource.generate(from: alphanumericalKeyboardLayout) == nil {
alphanumericalKeyboardLayout = kDefaultAlphanumericalKeyboardLayout
}
//
if ![0, 1, 2].contains(specifyIntonationKeyBehavior) {
specifyIntonationKeyBehavior = 0
}
if ![0, 1, 2].contains(specifyShiftBackSpaceKeyBehavior) {
specifyShiftBackSpaceKeyBehavior = 0
}
if ![0, 1, 2].contains(upperCaseLetterKeyBehavior) {
upperCaseLetterKeyBehavior = 0
}
if ![0, 1, 2].contains(shiftKeyAccommodationBehavior) {
shiftKeyAccommodationBehavior = 0
}
}
}

View File

@ -0,0 +1,56 @@
// (c) 2021 and onwards The vChewing Project (MIT-NTL License).
// ====================
// This code is released under the MIT license (SPDX-License-Identifier: MIT)
// ... with NTL restriction stating that:
// No trademark license is granted to use the trade names, trademarks, service
// marks, or product names of Contributor, except as required to fulfill notice
// requirements defined in MIT License.
import Shared
// MARK: Auto parameter fix procedures, executed everytime on ctlInputMethod.activateServer().
extension PrefMgr {
public func fixOddPreferences() {
// macOS 10.11 IMK macOS 10.13 IMK
// IMK macOS 10.09
// macOS 10.14 IMKCandidates
if #unavailable(macOS 10.13) { useIMKCandidateWindow = false }
if #unavailable(macOS 10.15) {
handleDefaultCandidateFontsByLangIdentifier = false
shiftKeyAccommodationBehavior = 0
disableShiftTogglingAlphanumericalMode = false
togglingAlphanumericalModeWithLShift = false
}
//
clientsIMKTextInputIncapable = Array(Set(clientsIMKTextInputIncapable)).sorted()
//
var isKeyboardParserOptionValid = false
KeyboardParser.allCases.forEach {
if $0.rawValue == keyboardParser { isKeyboardParserOptionValid = true }
}
if !isKeyboardParserOptionValid {
keyboardParser = 0
}
//
if TISInputSource.generate(from: basicKeyboardLayout) == nil {
basicKeyboardLayout = Self.kDefaultBasicKeyboardLayout
}
if TISInputSource.generate(from: alphanumericalKeyboardLayout) == nil {
alphanumericalKeyboardLayout = Self.kDefaultAlphanumericalKeyboardLayout
}
//
if ![0, 1, 2].contains(specifyIntonationKeyBehavior) {
specifyIntonationKeyBehavior = 0
}
if ![0, 1, 2].contains(specifyShiftBackSpaceKeyBehavior) {
specifyShiftBackSpaceKeyBehavior = 0
}
if ![0, 1, 2].contains(upperCaseLetterKeyBehavior) {
upperCaseLetterKeyBehavior = 0
}
if ![0, 1, 2].contains(shiftKeyAccommodationBehavior) {
shiftKeyAccommodationBehavior = 0
}
}
}

View File

@ -34,7 +34,7 @@
5B8457A12871ADBE00C93B01 /* ChineseConverterBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B8457A02871ADBE00C93B01 /* ChineseConverterBridge.swift */; }; 5B8457A12871ADBE00C93B01 /* ChineseConverterBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B8457A02871ADBE00C93B01 /* ChineseConverterBridge.swift */; };
5B963C9D28D5BFB800DCEE88 /* CocoaExtension in Frameworks */ = {isa = PBXBuildFile; productRef = 5B963C9C28D5BFB800DCEE88 /* CocoaExtension */; }; 5B963C9D28D5BFB800DCEE88 /* CocoaExtension in Frameworks */ = {isa = PBXBuildFile; productRef = 5B963C9C28D5BFB800DCEE88 /* CocoaExtension */; };
5B963CA328D5C23600DCEE88 /* SwiftExtension in Frameworks */ = {isa = PBXBuildFile; productRef = 5B963CA228D5C23600DCEE88 /* SwiftExtension */; }; 5B963CA328D5C23600DCEE88 /* SwiftExtension in Frameworks */ = {isa = PBXBuildFile; productRef = 5B963CA228D5C23600DCEE88 /* SwiftExtension */; };
5B963CA828D5DB1400DCEE88 /* PrefMgr.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B963CA728D5DB1400DCEE88 /* PrefMgr.swift */; }; 5B963CA828D5DB1400DCEE88 /* PrefMgr_Core.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B963CA728D5DB1400DCEE88 /* PrefMgr_Core.swift */; };
5B98114828D6198700CBC605 /* PinyinPhonaConverter in Frameworks */ = {isa = PBXBuildFile; productRef = 5B98114728D6198700CBC605 /* PinyinPhonaConverter */; }; 5B98114828D6198700CBC605 /* PinyinPhonaConverter in Frameworks */ = {isa = PBXBuildFile; productRef = 5B98114728D6198700CBC605 /* PinyinPhonaConverter */; };
5BA9FD0F27FEDB6B002DE248 /* suiPrefPaneGeneral.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA9FD0A27FEDB6B002DE248 /* suiPrefPaneGeneral.swift */; }; 5BA9FD0F27FEDB6B002DE248 /* suiPrefPaneGeneral.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA9FD0A27FEDB6B002DE248 /* suiPrefPaneGeneral.swift */; };
5BA9FD1027FEDB6B002DE248 /* suiPrefPaneKeyboard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA9FD0B27FEDB6B002DE248 /* suiPrefPaneKeyboard.swift */; }; 5BA9FD1027FEDB6B002DE248 /* suiPrefPaneKeyboard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA9FD0B27FEDB6B002DE248 /* suiPrefPaneKeyboard.swift */; };
@ -58,6 +58,7 @@
5BC447A02865686500EDC323 /* data-symbols.plist in Resources */ = {isa = PBXBuildFile; fileRef = 5BEDB71E283B4AEA0078EB25 /* data-symbols.plist */; }; 5BC447A02865686500EDC323 /* data-symbols.plist in Resources */ = {isa = PBXBuildFile; fileRef = 5BEDB71E283B4AEA0078EB25 /* data-symbols.plist */; };
5BC447A12865686500EDC323 /* data-zhuyinwen.plist in Resources */ = {isa = PBXBuildFile; fileRef = 5BEDB71F283B4AEA0078EB25 /* data-zhuyinwen.plist */; }; 5BC447A12865686500EDC323 /* data-zhuyinwen.plist in Resources */ = {isa = PBXBuildFile; fileRef = 5BEDB71F283B4AEA0078EB25 /* data-zhuyinwen.plist */; };
5BC447A628656A1900EDC323 /* Placeholder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BC447A228656A1900EDC323 /* Placeholder.swift */; }; 5BC447A628656A1900EDC323 /* Placeholder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BC447A228656A1900EDC323 /* Placeholder.swift */; };
5BCCAFF828DB19A300AB1B27 /* PrefMgr_Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BCCAFF728DB19A300AB1B27 /* PrefMgr_Extension.swift */; };
5BD0113D2818543900609769 /* KeyHandler_Core.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BD0113C2818543900609769 /* KeyHandler_Core.swift */; }; 5BD0113D2818543900609769 /* KeyHandler_Core.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BD0113C2818543900609769 /* KeyHandler_Core.swift */; };
5BD05BCA27B2A43D004C4F1D /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6A2E40F5253A69DA00D1AE1D /* Images.xcassets */; }; 5BD05BCA27B2A43D004C4F1D /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6A2E40F5253A69DA00D1AE1D /* Images.xcassets */; };
5BD05C5D27B2BBA9004C4F1D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5BD05C5B27B2BBA9004C4F1D /* Main.storyboard */; }; 5BD05C5D27B2BBA9004C4F1D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5BD05C5B27B2BBA9004C4F1D /* Main.storyboard */; };
@ -222,7 +223,7 @@
5B963C9B28D5BE4100DCEE88 /* vChewing_CocoaExtension */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = vChewing_CocoaExtension; path = Packages/vChewing_CocoaExtension; sourceTree = "<group>"; }; 5B963C9B28D5BE4100DCEE88 /* vChewing_CocoaExtension */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = vChewing_CocoaExtension; path = Packages/vChewing_CocoaExtension; sourceTree = "<group>"; };
5B963C9E28D5C14600DCEE88 /* vChewing_Shared */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = vChewing_Shared; path = Packages/vChewing_Shared; sourceTree = "<group>"; }; 5B963C9E28D5C14600DCEE88 /* vChewing_Shared */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = vChewing_Shared; path = Packages/vChewing_Shared; sourceTree = "<group>"; };
5B963CA128D5C22D00DCEE88 /* vChewing_SwiftExtension */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = vChewing_SwiftExtension; path = Packages/vChewing_SwiftExtension; sourceTree = "<group>"; }; 5B963CA128D5C22D00DCEE88 /* vChewing_SwiftExtension */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = vChewing_SwiftExtension; path = Packages/vChewing_SwiftExtension; sourceTree = "<group>"; };
5B963CA728D5DB1400DCEE88 /* PrefMgr.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrefMgr.swift; sourceTree = "<group>"; }; 5B963CA728D5DB1400DCEE88 /* PrefMgr_Core.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrefMgr_Core.swift; sourceTree = "<group>"; };
5B98114628D6198000CBC605 /* vChewing_PinyinPhonaConverter */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = vChewing_PinyinPhonaConverter; path = Packages/vChewing_PinyinPhonaConverter; sourceTree = "<group>"; }; 5B98114628D6198000CBC605 /* vChewing_PinyinPhonaConverter */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = vChewing_PinyinPhonaConverter; path = Packages/vChewing_PinyinPhonaConverter; sourceTree = "<group>"; };
5BA9FD0A27FEDB6B002DE248 /* suiPrefPaneGeneral.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = suiPrefPaneGeneral.swift; sourceTree = "<group>"; tabWidth = 2; usesTabs = 0; }; 5BA9FD0A27FEDB6B002DE248 /* suiPrefPaneGeneral.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = suiPrefPaneGeneral.swift; sourceTree = "<group>"; tabWidth = 2; usesTabs = 0; };
5BA9FD0B27FEDB6B002DE248 /* suiPrefPaneKeyboard.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = suiPrefPaneKeyboard.swift; sourceTree = "<group>"; tabWidth = 2; usesTabs = 0; }; 5BA9FD0B27FEDB6B002DE248 /* suiPrefPaneKeyboard.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = suiPrefPaneKeyboard.swift; sourceTree = "<group>"; tabWidth = 2; usesTabs = 0; };
@ -245,6 +246,7 @@
5BC2652127E04B7B00700291 /* uninstall.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; lineEnding = 0; path = uninstall.sh; sourceTree = "<group>"; }; 5BC2652127E04B7B00700291 /* uninstall.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; lineEnding = 0; path = uninstall.sh; sourceTree = "<group>"; };
5BC447A228656A1900EDC323 /* Placeholder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Placeholder.swift; sourceTree = "<group>"; }; 5BC447A228656A1900EDC323 /* Placeholder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Placeholder.swift; sourceTree = "<group>"; };
5BC447AB2865BEF500EDC323 /* AUTHORS */ = {isa = PBXFileReference; lastKnownFileType = text; path = AUTHORS; sourceTree = "<group>"; }; 5BC447AB2865BEF500EDC323 /* AUTHORS */ = {isa = PBXFileReference; lastKnownFileType = text; path = AUTHORS; sourceTree = "<group>"; };
5BCCAFF728DB19A300AB1B27 /* PrefMgr_Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrefMgr_Extension.swift; sourceTree = "<group>"; };
5BD0113C2818543900609769 /* KeyHandler_Core.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; lineEnding = 0; path = KeyHandler_Core.swift; sourceTree = "<group>"; usesTabs = 0; }; 5BD0113C2818543900609769 /* KeyHandler_Core.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; lineEnding = 0; path = KeyHandler_Core.swift; sourceTree = "<group>"; usesTabs = 0; };
5BD05BB827B2A429004C4F1D /* vChewingPhraseEditor.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = vChewingPhraseEditor.app; sourceTree = BUILT_PRODUCTS_DIR; }; 5BD05BB827B2A429004C4F1D /* vChewingPhraseEditor.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = vChewingPhraseEditor.app; sourceTree = BUILT_PRODUCTS_DIR; };
5BD05BC627B2A42A004C4F1D /* vChewingPhraseEditor.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = vChewingPhraseEditor.entitlements; sourceTree = "<group>"; }; 5BD05BC627B2A42A004C4F1D /* vChewingPhraseEditor.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = vChewingPhraseEditor.entitlements; sourceTree = "<group>"; };
@ -692,7 +694,8 @@
5B3133BE280B229700A4A505 /* KeyHandler_States.swift */, 5B3133BE280B229700A4A505 /* KeyHandler_States.swift */,
5BAEFACF28012565001F42C9 /* LMMgr.swift */, 5BAEFACF28012565001F42C9 /* LMMgr.swift */,
D47B92BF27972AC800458394 /* main.swift */, D47B92BF27972AC800458394 /* main.swift */,
5B963CA728D5DB1400DCEE88 /* PrefMgr.swift */, 5B963CA728D5DB1400DCEE88 /* PrefMgr_Core.swift */,
5BCCAFF728DB19A300AB1B27 /* PrefMgr_Extension.swift */,
); );
path = Modules; path = Modules;
sourceTree = "<group>"; sourceTree = "<group>";
@ -1057,7 +1060,7 @@
isa = PBXSourcesBuildPhase; isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
5B963CA828D5DB1400DCEE88 /* PrefMgr.swift in Sources */, 5B963CA828D5DB1400DCEE88 /* PrefMgr_Core.swift in Sources */,
D427F76C278CA2B0004A2160 /* AppDelegate.swift in Sources */, D427F76C278CA2B0004A2160 /* AppDelegate.swift in Sources */,
5B7F225D2808501000DDD3CB /* KeyHandler_HandleInput.swift in Sources */, 5B7F225D2808501000DDD3CB /* KeyHandler_HandleInput.swift in Sources */,
5BA9FD1227FEDB6B002DE248 /* suiPrefPaneExperience.swift in Sources */, 5BA9FD1227FEDB6B002DE248 /* suiPrefPaneExperience.swift in Sources */,
@ -1082,6 +1085,7 @@
5B782EC4280C243C007276DE /* KeyHandler_HandleCandidate.swift in Sources */, 5B782EC4280C243C007276DE /* KeyHandler_HandleCandidate.swift in Sources */,
5BA9FD0F27FEDB6B002DE248 /* suiPrefPaneGeneral.swift in Sources */, 5BA9FD0F27FEDB6B002DE248 /* suiPrefPaneGeneral.swift in Sources */,
5B242403284B0D6500520FE4 /* ctlCandidateUniversal.swift in Sources */, 5B242403284B0D6500520FE4 /* ctlCandidateUniversal.swift in Sources */,
5BCCAFF828DB19A300AB1B27 /* PrefMgr_Extension.swift in Sources */,
5BA9FD1127FEDB6B002DE248 /* ctlPrefUI.swift in Sources */, 5BA9FD1127FEDB6B002DE248 /* ctlPrefUI.swift in Sources */,
5B8457A12871ADBE00C93B01 /* ChineseConverterBridge.swift in Sources */, 5B8457A12871ADBE00C93B01 /* ChineseConverterBridge.swift in Sources */,
5BA9FD1327FEDB6B002DE248 /* suiPrefPaneDictionary.swift in Sources */, 5BA9FD1327FEDB6B002DE248 /* suiPrefPaneDictionary.swift in Sources */,