From 6a3cc0f8be55343d75eef254329a5ec06bf46f8f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 7 Nov 2025 18:15:07 +0000 Subject: [PATCH] Refactor: Extract helper methods to reduce code duplication Co-authored-by: jonasbark <1151304+jonasbark@users.noreply.github.com> --- .../keypress_simulator_windows_plugin.cpp | 31 ++--- lib/widgets/custom_keymap_selector.dart | 115 ++++++++++-------- 2 files changed, 78 insertions(+), 68 deletions(-) diff --git a/keypress_simulator/packages/keypress_simulator_windows/windows/keypress_simulator_windows_plugin.cpp b/keypress_simulator/packages/keypress_simulator_windows/windows/keypress_simulator_windows_plugin.cpp index acc2e12..0ac1f4b 100644 --- a/keypress_simulator/packages/keypress_simulator_windows/windows/keypress_simulator_windows_plugin.cpp +++ b/keypress_simulator/packages/keypress_simulator_windows/windows/keypress_simulator_windows_plugin.cpp @@ -99,19 +99,24 @@ void KeypressSimulatorWindowsPlugin::SimulateKeyPress( SendInput(1, &in, sizeof(INPUT)); }; - // Press modifier keys first (if keyDown) - if (keyDown) { - for (const std::string& modifier : modifiers) { + // Helper function to process modifiers + auto processModifiers = [&sendModifierKey](const std::vector& mods, bool down) { + for (const std::string& modifier : mods) { if (modifier == "shiftModifier") { - sendModifierKey(VK_SHIFT, true); + sendModifierKey(VK_SHIFT, down); } else if (modifier == "controlModifier") { - sendModifierKey(VK_CONTROL, true); + sendModifierKey(VK_CONTROL, down); } else if (modifier == "altModifier") { - sendModifierKey(VK_MENU, true); + sendModifierKey(VK_MENU, down); } else if (modifier == "metaModifier") { - sendModifierKey(VK_LWIN, true); + sendModifierKey(VK_LWIN, down); } } + }; + + // Press modifier keys first (if keyDown) + if (keyDown) { + processModifiers(modifiers, true); } // Send the main key @@ -131,17 +136,7 @@ void KeypressSimulatorWindowsPlugin::SimulateKeyPress( // Release modifier keys (if keyUp) if (!keyDown) { - for (const std::string& modifier : modifiers) { - if (modifier == "shiftModifier") { - sendModifierKey(VK_SHIFT, false); - } else if (modifier == "controlModifier") { - sendModifierKey(VK_CONTROL, false); - } else if (modifier == "altModifier") { - sendModifierKey(VK_MENU, false); - } else if (modifier == "metaModifier") { - sendModifierKey(VK_LWIN, false); - } - } + processModifiers(modifiers, false); } /*BYTE byteValue = static_cast(keyCode); diff --git a/lib/widgets/custom_keymap_selector.dart b/lib/widgets/custom_keymap_selector.dart index 9c66933..51a31bf 100644 --- a/lib/widgets/custom_keymap_selector.dart +++ b/lib/widgets/custom_keymap_selector.dart @@ -55,26 +55,9 @@ class _HotKeyListenerState extends State { setState(() { // Track modifier keys if (event is KeyDownEvent) { - if (event.logicalKey == LogicalKeyboardKey.shift || - event.logicalKey == LogicalKeyboardKey.shiftLeft || - event.logicalKey == LogicalKeyboardKey.shiftRight) { - _activeModifiers.add(ModifierKey.shiftModifier); - } else if (event.logicalKey == LogicalKeyboardKey.control || - event.logicalKey == LogicalKeyboardKey.controlLeft || - event.logicalKey == LogicalKeyboardKey.controlRight) { - _activeModifiers.add(ModifierKey.controlModifier); - } else if (event.logicalKey == LogicalKeyboardKey.alt || - event.logicalKey == LogicalKeyboardKey.altLeft || - event.logicalKey == LogicalKeyboardKey.altRight) { - _activeModifiers.add(ModifierKey.altModifier); - } else if (event.logicalKey == LogicalKeyboardKey.meta || - event.logicalKey == LogicalKeyboardKey.metaLeft || - event.logicalKey == LogicalKeyboardKey.metaRight) { - _activeModifiers.add(ModifierKey.metaModifier); - } else if (event.logicalKey == LogicalKeyboardKey.fn) { - _activeModifiers.add(ModifierKey.functionModifier); - } else { - // Regular key pressed - record it along with active modifiers + _updateModifierState(event.logicalKey, add: true); + // Regular key pressed - record it along with active modifiers + if (!_isModifierKey(event.logicalKey)) { _pressedKey = event; widget.customApp.setKey( _pressedButton!, @@ -86,48 +69,80 @@ class _HotKeyListenerState extends State { } } else if (event is KeyUpEvent) { // Clear modifier when released - if (event.logicalKey == LogicalKeyboardKey.shift || - event.logicalKey == LogicalKeyboardKey.shiftLeft || - event.logicalKey == LogicalKeyboardKey.shiftRight) { - _activeModifiers.remove(ModifierKey.shiftModifier); - } else if (event.logicalKey == LogicalKeyboardKey.control || - event.logicalKey == LogicalKeyboardKey.controlLeft || - event.logicalKey == LogicalKeyboardKey.controlRight) { - _activeModifiers.remove(ModifierKey.controlModifier); - } else if (event.logicalKey == LogicalKeyboardKey.alt || - event.logicalKey == LogicalKeyboardKey.altLeft || - event.logicalKey == LogicalKeyboardKey.altRight) { - _activeModifiers.remove(ModifierKey.altModifier); - } else if (event.logicalKey == LogicalKeyboardKey.meta || - event.logicalKey == LogicalKeyboardKey.metaLeft || - event.logicalKey == LogicalKeyboardKey.metaRight) { - _activeModifiers.remove(ModifierKey.metaModifier); - } else if (event.logicalKey == LogicalKeyboardKey.fn) { - _activeModifiers.remove(ModifierKey.functionModifier); - } + _updateModifierState(event.logicalKey, add: false); } }); } + bool _isModifierKey(LogicalKeyboardKey key) { + return key == LogicalKeyboardKey.shift || + key == LogicalKeyboardKey.shiftLeft || + key == LogicalKeyboardKey.shiftRight || + key == LogicalKeyboardKey.control || + key == LogicalKeyboardKey.controlLeft || + key == LogicalKeyboardKey.controlRight || + key == LogicalKeyboardKey.alt || + key == LogicalKeyboardKey.altLeft || + key == LogicalKeyboardKey.altRight || + key == LogicalKeyboardKey.meta || + key == LogicalKeyboardKey.metaLeft || + key == LogicalKeyboardKey.metaRight || + key == LogicalKeyboardKey.fn; + } + + void _updateModifierState(LogicalKeyboardKey key, {required bool add}) { + ModifierKey? modifier; + + if (key == LogicalKeyboardKey.shift || + key == LogicalKeyboardKey.shiftLeft || + key == LogicalKeyboardKey.shiftRight) { + modifier = ModifierKey.shiftModifier; + } else if (key == LogicalKeyboardKey.control || + key == LogicalKeyboardKey.controlLeft || + key == LogicalKeyboardKey.controlRight) { + modifier = ModifierKey.controlModifier; + } else if (key == LogicalKeyboardKey.alt || + key == LogicalKeyboardKey.altLeft || + key == LogicalKeyboardKey.altRight) { + modifier = ModifierKey.altModifier; + } else if (key == LogicalKeyboardKey.meta || + key == LogicalKeyboardKey.metaLeft || + key == LogicalKeyboardKey.metaRight) { + modifier = ModifierKey.metaModifier; + } else if (key == LogicalKeyboardKey.fn) { + modifier = ModifierKey.functionModifier; + } + + if (modifier != null) { + if (add) { + _activeModifiers.add(modifier); + } else { + _activeModifiers.remove(modifier); + } + } + } + + String _formatModifierName(ModifierKey m) { + return switch (m) { + ModifierKey.shiftModifier => 'Shift', + ModifierKey.controlModifier => 'Ctrl', + ModifierKey.altModifier => 'Alt', + ModifierKey.metaModifier => 'Meta', + ModifierKey.functionModifier => 'Fn', + _ => m.name, + }; + } + String _formatKey(KeyDownEvent? key) { if (key == null) { - return _activeModifiers.isEmpty ? 'Waiting...' : '${_activeModifiers.map((m) => m.name.replaceAll('Modifier', '')).join('+')}+...'; + return _activeModifiers.isEmpty ? 'Waiting...' : '${_activeModifiers.map(_formatModifierName).join('+')}+...'; } if (_activeModifiers.isEmpty) { return key.logicalKey.keyLabel; } - final modifierStrings = _activeModifiers.map((m) { - return switch (m) { - ModifierKey.shiftModifier => 'Shift', - ModifierKey.controlModifier => 'Ctrl', - ModifierKey.altModifier => 'Alt', - ModifierKey.metaModifier => 'Meta', - ModifierKey.functionModifier => 'Fn', - _ => m.name, - }; - }); + final modifierStrings = _activeModifiers.map(_formatModifierName); return '${modifierStrings.join('+')}+${key.logicalKey.keyLabel}'; }