ctlIME // Optimizing modifier key conditions (Rebased).
- Flag Change Conditioning shall not get removed. Otherwise, when in the empty state, the first character being input won't be parsed by the IME. - "return false" is the one that passing trash data to the "still nothing" section of the KeyHandler. Removing the "still nothing" allows these trash data to be passed to IMK but can lead to problems like misbehaved F1-F12 keys, etc., plus triggering "NSInternalInconsistencyException" for each modifier key input.
This commit is contained in:
parent
ba7f4aea8d
commit
d91e220b14
|
@ -188,25 +188,22 @@ class ctlInputMethod: IMKInputController {
|
||||||
|
|
||||||
override func handle(_ event: NSEvent!, client: Any!) -> Bool {
|
override func handle(_ event: NSEvent!, client: Any!) -> Bool {
|
||||||
|
|
||||||
if event.type == .flagsChanged {
|
// 這裡仍舊需要判斷 flags。之前使輸入法狀態卡住無法敲漢字的問題已在 KeyHandler 內修復。
|
||||||
let functionKeyKeyboardLayoutID = mgrPrefs.functionKeyboardLayout
|
// 這裡不判斷 flags 的話,用方向鍵前後定位光標之後,再次試圖觸發組字區時、反而會在首次按鍵時失敗。
|
||||||
let basisKeyboardLayoutID = mgrPrefs.basisKeyboardLayout
|
// 同時注意:必須將 event.type == .flagsChanged 放在最外圍、且在其結尾插入 return false,
|
||||||
|
// 否則,每次處理這種判斷時都會觸發 NSInternalInconsistencyException。
|
||||||
if functionKeyKeyboardLayoutID == basisKeyboardLayoutID {
|
if (mgrPrefs.functionKeyboardLayout != mgrPrefs.basisKeyboardLayout) && (event.type == .flagsChanged) {
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
let includeShift = mgrPrefs.functionKeyKeyboardLayoutOverrideIncludeShiftKey
|
let includeShift = mgrPrefs.functionKeyKeyboardLayoutOverrideIncludeShiftKey
|
||||||
|
if (event.modifierFlags == .capsLock ||
|
||||||
if event.modifierFlags.contains(.capsLock) ||
|
event.modifierFlags.contains(.command) ||
|
||||||
event.modifierFlags.contains(.option) ||
|
event.modifierFlags.contains(.option) ||
|
||||||
event.modifierFlags.contains(.control) ||
|
event.modifierFlags.contains(.control) ||
|
||||||
event.modifierFlags.contains(.function) ||
|
event.modifierFlags.contains(.function) ||
|
||||||
(event.modifierFlags.contains(.shift) && includeShift) {
|
(event.modifierFlags.contains(.shift) && includeShift)) {
|
||||||
(client as? IMKTextInput)?.overrideKeyboard(withKeyboardNamed: functionKeyKeyboardLayoutID)
|
(client as? IMKTextInput)?.overrideKeyboard(withKeyboardNamed: mgrPrefs.functionKeyboardLayout)
|
||||||
return false
|
} else {
|
||||||
|
(client as? IMKTextInput)?.overrideKeyboard(withKeyboardNamed: mgrPrefs.basisKeyboardLayout)
|
||||||
}
|
}
|
||||||
(client as? IMKTextInput)?.overrideKeyboard(withKeyboardNamed: basisKeyboardLayoutID)
|
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue