Refactor: Extract helper methods to reduce code duplication

Co-authored-by: jonasbark <1151304+jonasbark@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2025-11-07 18:15:07 +00:00
parent 35a995eddc
commit 6a3cc0f8be
2 changed files with 78 additions and 68 deletions

View File

@@ -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<std::string>& 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<BYTE>(keyCode);

View File

@@ -55,26 +55,9 @@ class _HotKeyListenerState extends State<HotKeyListenerDialog> {
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<HotKeyListenerDialog> {
}
} 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}';
}