TISInputSourceExtension // Simplify rawTISInputSources().

This commit is contained in:
ShikiSuen 2023-07-21 00:02:24 +08:00
parent 1205ed7ed4
commit c42237bb2e
1 changed files with 5 additions and 14 deletions

View File

@ -123,21 +123,12 @@ public extension TISInputSource {
static func rawTISInputSources(onlyASCII: Bool = false) -> [String: TISInputSource] {
// CFDictionary
//
let conditions = CFDictionaryCreateMutable(nil, 2, nil, nil)
if onlyASCII {
//
CFDictionaryAddValue(
conditions, unsafeBitCast(kTISPropertyInputSourceType, to: UnsafeRawPointer.self),
unsafeBitCast(kTISTypeKeyboardLayout, to: UnsafeRawPointer.self)
)
// ASCII
CFDictionaryAddValue(
conditions, unsafeBitCast(kTISPropertyInputSourceIsASCIICapable, to: UnsafeRawPointer.self),
unsafeBitCast(kCFBooleanTrue, to: UnsafeRawPointer.self)
)
}
let dicConditions: [CFString: Any] = !onlyASCII ? [:] : [
kTISPropertyInputSourceType: kTISTypeKeyboardLayout as CFString,
kTISPropertyInputSourceIsASCIICapable: kCFBooleanTrue as CFBoolean,
]
//
var result = TISCreateInputSourceList(conditions, true).takeRetainedValue() as? [TISInputSource] ?? .init()
var result = TISCreateInputSourceList(dicConditions as CFDictionary, true).takeRetainedValue() as? [TISInputSource] ?? .init()
if onlyASCII {
result = result.filter { $0.scriptCode == 0 }
}