From 4947f4904351e043f766685226c5dad8c2f22ff4 Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Sat, 15 Apr 2023 12:42:26 +0800 Subject: [PATCH] SessionCtl // Again stop handling nulled NSEvents. --- Source/Modules/SessionCtl_HandleEvent.swift | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Source/Modules/SessionCtl_HandleEvent.swift b/Source/Modules/SessionCtl_HandleEvent.swift index c88f56e5..be95fbcb 100644 --- a/Source/Modules/SessionCtl_HandleEvent.swift +++ b/Source/Modules/SessionCtl_HandleEvent.swift @@ -21,9 +21,16 @@ public extension SessionCtl { /// - event: 裝置操作輸入事件,可能會是 nil。 /// - sender: 呼叫了該函式的客體(無須使用)。 /// - Returns: 回「`true`」以將該按鍵已攔截處理的訊息傳遞給 IMK;回「`false`」則放行、不作處理。 - @objc(handleEvent:client:) override func handle(_ event: NSEvent!, client sender: Any!) -> Bool { + @objc(handleEvent:client:) override func handle(_ event: NSEvent?, client sender: Any?) -> Bool { _ = sender // 防止格式整理工具毀掉與此對應的參數。 + // 就這傳入的 NSEvent 都還有可能是 nil,Apple InputMethodKit 團隊到底在搞三小。 + // 只針對特定類型的 client() 進行處理。 + guard let event = event, sender is IMKTextInput else { + resetInputHandler(forceComposerCleanup: true) + return false + } + // MARK: 前置處理 // 雖然在 recognizedEvents 當中有過定義,但這裡還是再多施加一道保險。 @@ -35,13 +42,6 @@ public extension SessionCtl { return handle(event, client: client) } - // 就這傳入的 NSEvent 都還有可能是 nil,Apple InputMethodKit 團隊到底在搞三小。 - // 只針對特定類型的 client() 進行處理。 - guard let event = event, sender is IMKTextInput else { - resetInputHandler(forceComposerCleanup: true) - return false - } - // Caps Lock 通知與切換處理,要求至少 macOS 12 Monterey。 if #available(macOS 12, *) { if event.type == .flagsChanged, event.keyCode == KeyCode.kCapsLock.rawValue {