From d6c1f0bd03dc54cd8883f5b8e9fa3ccc234b0c19 Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Sun, 10 Apr 2022 11:53:55 +0800 Subject: [PATCH] IME // Implement a whitelist towards enumerated keyLayouts. --- Source/Modules/IMEModules/IME.swift | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/Source/Modules/IMEModules/IME.swift b/Source/Modules/IMEModules/IME.swift index 3cc832cc..349c813c 100644 --- a/Source/Modules/IMEModules/IME.swift +++ b/Source/Modules/IMEModules/IME.swift @@ -230,6 +230,17 @@ import Cocoa var strName: String = "" var strValue: String = "" } + static let arrWhitelistedKeyLayoutsASCII: [String] = [ + "com.apple.keylayout.ABC", + "com.apple.keylayout.ABC-AZERTY", + "com.apple.keylayout.ABC-QWERTZ", + "com.apple.keylayout.British", + "com.apple.keylayout.Colemak", + "com.apple.keylayout.Dvorak", + "com.apple.keylayout.Dvorak-Left", + "com.apple.keylayout.DVORAK-QWERTYCMD", + "com.apple.keylayout.Dvorak-Right", + ] static var arrEnumerateSystemKeyboardLayouts: [IME.CarbonKeyboardLayout] { // 提前塞入 macOS 內建的兩款動態鍵盤佈局 var arrKeyLayouts: [IME.CarbonKeyboardLayout] = [] @@ -243,6 +254,7 @@ import Cocoa ] // 準備枚舉系統內所有的 ASCII 鍵盤佈局 + var arrKeyLayoutsMACV: [IME.CarbonKeyboardLayout] = [] var arrKeyLayoutsASCII: [IME.CarbonKeyboardLayout] = [] let list = TISCreateInputSourceList(nil, true).takeRetainedValue() as! [TISInputSource] for source in list { @@ -286,10 +298,19 @@ import Cocoa let localizedName = String( Unmanaged.fromOpaque(localizedNamePtr).takeUnretainedValue()) - arrKeyLayoutsASCII += [ - IME.CarbonKeyboardLayout.init(strName: localizedName, strValue: sourceID) - ] + if sourceID.contains("vChewing") { + arrKeyLayoutsMACV += [ + IME.CarbonKeyboardLayout.init(strName: localizedName, strValue: sourceID) + ] + } + + if IME.arrWhitelistedKeyLayoutsASCII.contains(sourceID) { + arrKeyLayoutsASCII += [ + IME.CarbonKeyboardLayout.init(strName: localizedName, strValue: sourceID) + ] + } } + arrKeyLayouts += arrKeyLayoutsMACV arrKeyLayouts += arrKeyLayoutsASCII return arrKeyLayouts }