diff --git a/Packages/HangarRash_SwiftyCapsLockToggler/Sources/SwiftyCapsLockToggler/SwiftyCapsLockToggler.swift b/Packages/HangarRash_SwiftyCapsLockToggler/Sources/SwiftyCapsLockToggler/SwiftyCapsLockToggler.swift index bb0c657d..f24517f5 100644 --- a/Packages/HangarRash_SwiftyCapsLockToggler/Sources/SwiftyCapsLockToggler/SwiftyCapsLockToggler.swift +++ b/Packages/HangarRash_SwiftyCapsLockToggler/Sources/SwiftyCapsLockToggler/SwiftyCapsLockToggler.swift @@ -7,13 +7,7 @@ import CapsLockToggler public enum CapsLockToggler { public static func toggle() { - let thePort: mach_port_t = { - if #available(macOS 12.0, *) { - return kIOMainPortDefault - } - return kIOMasterPortDefault - }() - let ioService: io_service_t = IOServiceGetMatchingService(thePort, IOServiceMatching(kIOHIDSystemClass)) + let ioService: io_service_t = IOServiceGetMatchingService(0, IOServiceMatching(kIOHIDSystemClass)) var ioConnect: io_connect_t = 0 IOServiceOpen(ioService, mach_task_self_, UInt32(kIOHIDParamConnectType), &ioConnect) var state = false @@ -23,14 +17,17 @@ public enum CapsLockToggler { IOServiceClose(ioConnect) } + public static var isOn: Bool { + let ioService: io_service_t = IOServiceGetMatchingService(0, IOServiceMatching(kIOHIDSystemClass)) + var ioConnect: io_connect_t = 0 + IOServiceOpen(ioService, mach_task_self_, UInt32(kIOHIDParamConnectType), &ioConnect) + var state = false + IOHIDGetModifierLockState(ioConnect, Int32(kIOHIDCapsLockState), &state) + return state + } + public static func turnOff() { - let thePort: mach_port_t = { - if #available(macOS 12.0, *) { - return kIOMainPortDefault - } - return kIOMasterPortDefault - }() - let ioService: io_service_t = IOServiceGetMatchingService(thePort, IOServiceMatching(kIOHIDSystemClass)) + let ioService: io_service_t = IOServiceGetMatchingService(0, IOServiceMatching(kIOHIDSystemClass)) var ioConnect: io_connect_t = 0 IOServiceOpen(ioService, mach_task_self_, UInt32(kIOHIDParamConnectType), &ioConnect) IOHIDSetModifierLockState(ioConnect, Int32(kIOHIDCapsLockState), false) diff --git a/Packages/vChewing_MainAssembly/Sources/MainAssembly/SessionCtl_HandleEvent.swift b/Packages/vChewing_MainAssembly/Sources/MainAssembly/SessionCtl_HandleEvent.swift index 560bbcac..af2cc70a 100644 --- a/Packages/vChewing_MainAssembly/Sources/MainAssembly/SessionCtl_HandleEvent.swift +++ b/Packages/vChewing_MainAssembly/Sources/MainAssembly/SessionCtl_HandleEvent.swift @@ -81,7 +81,7 @@ public extension SessionCtl { if #available(macOS 12, *) { if event.type == .flagsChanged, event.keyCode == KeyCode.kCapsLock.rawValue { DispatchQueue.main.async { [weak self] in - let isCapsLockTurnedOn = Self.isCapsLocked + let isCapsLockTurnedOn = CapsLockToggler.isOn if PrefMgr.shared.shiftEisuToggleOffTogetherWithCapsLock, !isCapsLockTurnedOn, self?.isASCIIMode ?? false { self?.isASCIIMode.toggle() }