From 41bd5298b7fcda0f94b5e4cc461353b8918b3136 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sat, 2 Dec 2023 22:25:19 -0500 Subject: [PATCH] Signal only changes in modifiers. --- .../Documents/MachineDocument.swift | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift b/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift index 5397eb4be..cefc57dac 100644 --- a/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift +++ b/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift @@ -359,12 +359,28 @@ class MachineDocument: /// Synthesies appropriate key up and key down events upon any change in modifiers. func flagsChanged(_ newModifiers: NSEvent) { if let machine = self.machine { - machine.setKey(VK_Shift, characters: nil, isPressed: newModifiers.modifierFlags.contains(.shift)) - machine.setKey(VK_Control, characters: nil, isPressed: newModifiers.modifierFlags.contains(.control)) - machine.setKey(VK_Command, characters: nil, isPressed: newModifiers.modifierFlags.contains(.command)) - machine.setKey(VK_Option, characters: nil, isPressed: newModifiers.modifierFlags.contains(.option)) + if newModifiers.modifierFlags.contains(.shift) != shiftIsDown { + shiftIsDown = newModifiers.modifierFlags.contains(.shift) + machine.setKey(VK_Shift, characters: nil, isPressed: shiftIsDown) + } + if newModifiers.modifierFlags.contains(.control) != controlIsDown { + controlIsDown = newModifiers.modifierFlags.contains(.control) + machine.setKey(VK_Control, characters: nil, isPressed: controlIsDown) + } + if newModifiers.modifierFlags.contains(.command) != commandIsDown { + commandIsDown = newModifiers.modifierFlags.contains(.command) + machine.setKey(VK_Command, characters: nil, isPressed: commandIsDown) + } + if newModifiers.modifierFlags.contains(.option) != optionIsDown { + optionIsDown = newModifiers.modifierFlags.contains(.option) + machine.setKey(VK_Option, characters: nil, isPressed: optionIsDown) + } } } + private var shiftIsDown = false + private var controlIsDown = false + private var commandIsDown = false + private var optionIsDown = false /// Forwards mouse movement events to the mouse. func mouseMoved(_ event: NSEvent) {