NSEvent // Implement keyModifierFlags, etc.

This commit is contained in:
ShikiSuen 2023-08-10 14:51:09 +08:00
parent 308e068dfc
commit f3673fa4a8
16 changed files with 36 additions and 30 deletions

View File

@ -59,7 +59,7 @@ public struct ShiftKeyUpChecker {
if isKeyDown {
// modifier keydown event
lastTime = Date()
if event.modifierFlags == .shift { shiftIsBeingPressed = true }
if event.modifierFlags.intersection(.deviceIndependentFlagsMask) == .shift { shiftIsBeingPressed = true }
} else {
lastTime = Date(timeInterval: -3600 * 4, since: Date())
shiftIsBeingPressed = false

View File

@ -94,6 +94,10 @@ public extension NSEvent {
return result <= UInt16.max ? UInt16(result) : UInt16.max
}
var keyModifierFlags: ModifierFlags { modifierFlags.intersection(.deviceIndependentFlagsMask) }
static var keyModifierFlags: ModifierFlags { Self.modifierFlags.intersection(.deviceIndependentFlagsMask) }
var isFlagChanged: Bool { type == .flagsChanged }
var isEmacsKey: Bool {

View File

@ -187,7 +187,7 @@ public struct VwrPhraseEditorUI: View {
}
private func callExternalAppToOpenPhraseFile() {
let app: String = NSEvent.modifierFlags.contains(.option) ? "TextEdit" : "Finder"
let app: String = NSEvent.keyModifierFlags.contains(.option) ? "TextEdit" : "Finder"
delegate?.openPhraseFile(mode: selInputMode, type: selUserDataType, app: app)
}

View File

@ -15,6 +15,7 @@ extension NSEvent: InputSignalProtocol {}
public protocol InputSignalProtocol {
var modifierFlags: NSEvent.ModifierFlags { get }
var keyModifierFlags: NSEvent.ModifierFlags { get }
var isTypingVertical: Bool { get }
var text: String { get }
var inputTextIgnoringModifiers: String? { get }

View File

@ -559,7 +559,7 @@ public class InputHandler: InputHandlerProtocol {
if prefs.halfWidthPunctuationEnabled { return "_half_punctuation_" }
// SHIFT+ALT+
// input.isMainAreaNumKey Shift
if input.isMainAreaNumKey, input.modifierFlags == [.option, .shift] { return "_shift_alt_punctuation_" }
if input.isMainAreaNumKey, input.keyModifierFlags == [.option, .shift] { return "_shift_alt_punctuation_" }
var result = ""
switch (input.isControlHold, input.isOptionHold) {
case (true, true): result.append("_alt_ctrl_punctuation_")

View File

@ -41,7 +41,7 @@ extension InputHandler {
if candidates[highlightedIndex].keyArray.count < 2 || candidates[highlightedIndex].value.count < 2 {
break manipulator
}
switch input.modifierFlags {
switch input.keyModifierFlags {
case [.option, .command] where input.keyCode == 27: //
ctlCandidate.delegate?.candidatePairRightClicked(at: highlightedIndex, action: .toNerf)
return true
@ -274,8 +274,8 @@ extension InputHandler {
// MARK: - Flipping pages by using modified bracket keys (when they are not occupied).
// Shift+Command+[] Chrome Ctrl
let ctrlCMD: Bool = input.modifierFlags == [.control, .command]
let ctrlShiftCMD: Bool = input.modifierFlags == [.control, .command, .shift]
let ctrlCMD: Bool = input.keyModifierFlags == [.control, .command]
let ctrlShiftCMD: Bool = input.keyModifierFlags == [.control, .command, .shift]
if ctrlShiftCMD || ctrlCMD {
// JIS US
let isJIS: Bool = KBGetLayoutType(Int16(LMGetKbdType())) == kKeyboardJIS
@ -293,7 +293,7 @@ extension InputHandler {
// MARK: - Flipping pages by using symbol menu keys (when they are not occupied).
if input.isSymbolMenuPhysicalKey {
switch input.modifierFlags {
switch input.keyModifierFlags {
case .shift, [],
.option where state.type != .ofSymbolTable:
var updated = true

View File

@ -339,7 +339,7 @@ extension InputHandler {
var displayedText = state.displayedText
if input.modifierFlags == [.option, .shift] {
if input.keyModifierFlags == [.option, .shift] {
displayedText = displayedText.map(\.description).joined(separator: " ")
} else if readingOnly {
displayedText = commissionByCtrlCommandEnter()
@ -446,7 +446,7 @@ extension InputHandler {
delegate.switchState(updatedState)
}
strCodePointBuffer = strCodePointBuffer.dropLast(1).description
if input.modifierFlags == .option {
if input.keyModifierFlags == .option {
strCodePointBuffer.removeAll()
refreshState()
isCodePointInputMode = true
@ -488,7 +488,7 @@ extension InputHandler {
let steps = getStepsToNearbyNodeBorder(direction: .rear)
var actualSteps = 1
switch input.modifierFlags {
switch input.keyModifierFlags {
case .shift:
delegate.switchState(IMEState.ofAbortion())
return true
@ -507,7 +507,7 @@ extension InputHandler {
}
walk()
} else {
_ = input.modifierFlags == .option
_ = input.keyModifierFlags == .option
? clearComposerAndCalligrapher()
: letComposerAndCalligrapherDoBackSpace()
}
@ -549,7 +549,7 @@ extension InputHandler {
// macOS PC Delete .function
//
switch input.modifierFlags {
switch input.keyModifierFlags {
case _ where input.isShiftHold && !input.isOptionHold && !input.isControlHold:
delegate.switchState(IMEState.ofAbortion())
return true
@ -1044,7 +1044,7 @@ extension InputHandler {
//
let notEmpty = state.hasComposition && !compositor.isEmpty && isComposerOrCalligrapherEmpty
let bannedModifiers: NSEvent.ModifierFlags = [.option, .shift, .command, .control]
let noBannedModifiers = bannedModifiers.intersection(input.modifierFlags).isEmpty
let noBannedModifiers = bannedModifiers.intersection(input.keyModifierFlags).isEmpty
var triggered = input.isCursorClockLeft || input.isCursorClockRight
triggered = triggered || (input.isSpace && prefs.chooseCandidateUsingSpace)
triggered = triggered || input.isPageDown || input.isPageUp

View File

@ -47,7 +47,7 @@ public extension InputHandler {
case .kCarriageReturn, .kLineFeed: return handleEnter(input: input)
case .kSymbolMenuPhysicalKeyJIS, .kSymbolMenuPhysicalKeyIntl:
let isJIS = keyCodeType == .kSymbolMenuPhysicalKeyJIS
switch input.modifierFlags {
switch input.keyModifierFlags {
case []:
return handlePunctuationList(alternative: false, isJIS: isJIS)
case [.option, .shift]:
@ -141,13 +141,13 @@ public extension InputHandler {
//
haninSymbolInput: if prefs.classicHaninKeyboardSymbolModeShortcutEnabled {
guard let x = input.inputTextIgnoringModifiers,
"¥\\".contains(x), input.modifierFlags.isEmpty
"¥\\".contains(x), input.keyModifierFlags.isEmpty
else { break haninSymbolInput }
return handleHaninKeyboardSymbolModeToggle()
}
//
if isHaninKeyboardSymbolMode, [[], .shift].contains(input.modifierFlags) {
if isHaninKeyboardSymbolMode, [[], .shift].contains(input.keyModifierFlags) {
return handleHaninKeyboardSymbolModeInput(input: input)
} else if let compositionHandled = handleComposition(input: input) {
return compositionHandled
@ -158,8 +158,8 @@ public extension InputHandler {
// Ctrl+Command+[]
// Shift+Command+[] Chrome Ctrl
let ctrlCMD: Bool = input.modifierFlags == [.control, .command]
let ctrlShiftCMD: Bool = input.modifierFlags == [.control, .command, .shift]
let ctrlCMD: Bool = input.keyModifierFlags == [.control, .command]
let ctrlShiftCMD: Bool = input.keyModifierFlags == [.control, .command, .shift]
revolveCandidateWithBrackets: if ctrlShiftCMD || ctrlCMD {
if state.type != .ofInputting { break revolveCandidateWithBrackets }
// JIS US

View File

@ -97,7 +97,7 @@ public class SessionCtl: IMKInputController {
// MARK: -
/// Caps Lock
public var isCapsLocked: Bool { NSEvent.modifierFlags.intersection(.deviceIndependentFlagsMask).contains(.capsLock) }
public static var isCapsLocked: Bool { NSEvent.keyModifierFlags.contains(.capsLock) }
/// SessionCtl
public var isASCIIMode: Bool {

View File

@ -80,7 +80,7 @@ public extension SessionCtl {
if #available(macOS 12, *) {
if event.type == .flagsChanged, event.keyCode == KeyCode.kCapsLock.rawValue {
DispatchQueue.main.async {
let isCapsLockTurnedOn = event.modifierFlags.intersection(.deviceIndependentFlagsMask).contains(.capsLock)
let isCapsLockTurnedOn = Self.isCapsLocked
let status = NSLocalizedString("NotificationSwitchRevolver", comment: "")
guard PrefMgr.shared.showNotificationsWhenTogglingCapsLock else { return }
Notifier.notify(
@ -102,7 +102,7 @@ public extension SessionCtl {
// MARK:
// Shift
if isASCIIMode, !isCapsLocked { return false }
if isASCIIMode, !Self.isCapsLocked { return false }
/// flags使 InputHandler
/// flags
@ -166,7 +166,7 @@ public extension SessionCtl {
}
//
Self.areWeNerfing = eventToDeal.modifierFlags == [.shift, .command]
Self.areWeNerfing = eventToDeal.keyModifierFlags == [.shift, .command]
/// commonEventHandler
let result = inputHandler.triageInput(event: eventToDeal)

View File

@ -104,7 +104,7 @@ public extension SessionCtl {
let candidateString: String = candidateString?.string ?? ""
if state.type == .ofAssociates {
// Shift+
let isShiftHold = NSEvent.modifierFlags.contains(.shift)
let isShiftHold = NSEvent.keyModifierFlags.contains(.shift)
if !(isShiftHold || PrefMgr.shared.alsoConfirmAssociatedCandidatesByEnter) {
switchState(IMEState.ofAbortion())
return

View File

@ -22,7 +22,7 @@ private extension Bool {
//
extension SessionCtl {
var optionKeyPressed: Bool { NSEvent.modifierFlags.contains(.option) }
var optionKeyPressed: Bool { NSEvent.keyModifierFlags.contains(.option) }
override public func menu() -> NSMenu! {
let menu = NSMenu(title: "Input Method Menu")
@ -217,7 +217,7 @@ extension SessionCtl {
public extension SessionCtl {
@objc override func showPreferences(_: Any? = nil) {
osCheck: if #available(macOS 10.15, *) {
switch NSEvent.modifierFlags {
switch NSEvent.keyModifierFlags {
case .option: break osCheck
// case .shift:
// CtlPrefUIShared.shared.controller.show(preferencePane: PrefUITabs.tabGeneral.ssPaneIdentifier)

View File

@ -69,7 +69,7 @@ struct VwrPrefPaneCassette: View {
return false
}
Button {
if NSEvent.modifierFlags == .option, !cassettePath.isEmpty {
if NSEvent.keyModifierFlags == .option, !cassettePath.isEmpty {
NSWorkspace.shared.activateFileViewerSelecting(
[URL(fileURLWithPath: cassettePath)]
)

View File

@ -7,6 +7,7 @@
// requirements defined in MIT License.
import BookmarkManager
import CocoaExtension
import Shared
import SSPreferences
import SwiftExtension
@ -87,7 +88,7 @@ struct VwrPrefPaneDictionary: View {
return false
}
Button {
if NSEvent.modifierFlags == .option, !userDataFolderSpecified.isEmpty {
if NSEvent.keyModifierFlags == .option, !userDataFolderSpecified.isEmpty {
NSWorkspace.shared.activateFileViewerSelecting(
[URL(fileURLWithPath: userDataFolderSpecified)]
)

View File

@ -337,7 +337,7 @@ class CtlPrefWindow: NSWindowController, NSWindowDelegate {
}
@IBAction func chooseUserDataFolderToSpecify(_: Any) {
if NSEvent.modifierFlags == .option, let url = pctUserDictionaryFolder.url {
if NSEvent.keyModifierFlags == .option, let url = pctUserDictionaryFolder.url {
NSWorkspace.shared.activateFileViewerSelecting([url])
return
}
@ -412,7 +412,7 @@ class CtlPrefWindow: NSWindowController, NSWindowDelegate {
}
@IBAction func chooseCassettePath(_: Any) {
if NSEvent.modifierFlags == .option, let url = pctCassetteFilePath.url {
if NSEvent.keyModifierFlags == .option, let url = pctCassetteFilePath.url {
NSWorkspace.shared.activateFileViewerSelecting([url])
return
}

View File

@ -192,7 +192,7 @@ extension CtlPrefWindow: NSTextViewDelegate, NSTextFieldDelegate {
@IBAction func openExternallyPEButtonClicked(_: NSButton) {
DispatchQueue.main.async { [self] in
let app: String = NSEvent.modifierFlags.contains(.option) ? "TextEdit" : "Finder"
let app: String = NSEvent.keyModifierFlags.contains(.option) ? "TextEdit" : "Finder"
LMMgr.shared.openPhraseFile(mode: selInputMode, type: selUserDataType, app: app)
}
}