NSEvent // Make .text() safer.

This commit is contained in:
ShikiSuen 2023-06-09 21:52:31 +08:00
parent d92c5d3669
commit af715ad8d8
2 changed files with 7 additions and 7 deletions

View File

@ -23,10 +23,7 @@ public extension NSEvent {
isARepeat: Bool? = nil,
keyCode: UInt16? = nil
) -> NSEvent? {
let oldChars: String = {
if self.type == .flagsChanged { return "" }
return self.characters ?? ""
}()
let oldChars: String = text
return NSEvent.keyEvent(
with: type ?? self.type,
location: location ?? locationInWindow,
@ -78,7 +75,10 @@ public extension NSEvent {
public extension NSEvent {
var isTypingVertical: Bool { charactersIgnoringModifiers == "Vertical" }
var text: String { characters ?? "" }
/// NSEvent.characters
/// - Remark: event.type == .flagsChanged
/// event.characters? NSInternalInconsistencyException
var text: String { isFlagChanged ? "" : characters ?? "" }
var inputTextIgnoringModifiers: String? {
guard charactersIgnoringModifiers != nil else { return nil }
return charactersIgnoringModifiers ?? characters ?? ""
@ -313,7 +313,7 @@ public enum EmacsKey {
public extension NSEvent {
func layoutTranslated(to layout: LatinKeyboardMappings = .qwerty) -> NSEvent {
let mapTable = layout.mapTable
if type == .flagsChanged { return self }
if isFlagChanged { return self }
guard modifierFlags == .shift || modifierFlags.isEmpty else { return self }
if !mapTable.keys.contains(keyCode) { return self }
guard let dataTuplet = mapTable[keyCode] else { return self }

View File

@ -89,7 +89,7 @@ public extension SessionCtl {
/// flags
/// event.type == .flagsChanged
/// event.characters? NSInternalInconsistencyException
if event.type == .flagsChanged { return true }
if event.isFlagChanged { return true }
///
guard let inputHandler = inputHandler, client() != nil else { return false }