Skip to content

Commit d436059

Browse files
committed
fix(RuntimeInput): enhance hotkey binding and modifier detection
- Updated PrimaryKeyMatches method to include PhysicalKeycode for improved key event matching. - Enhanced IsModifierPressed method to return true when the modifier kind matches the key event, improving accuracy in modifier detection. - Refactored modifier key parsing to differentiate between left and right variants, ensuring more precise handling of modifier keys.
1 parent 371b1ca commit d436059

2 files changed

Lines changed: 20 additions & 9 deletions

File tree

RuntimeInput/RuntimeHotkeyBinding.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ private bool ModifiersMatch(InputEventKey keyEvent)
5555
private bool PrimaryKeyMatches(InputEventKey keyEvent)
5656
{
5757
if (!IsModifierOnly)
58-
return keyEvent.Keycode == PrimaryKey;
58+
return keyEvent.Keycode == PrimaryKey || keyEvent.PhysicalKeycode == PrimaryKey;
5959

6060
return RuntimeHotkeyParser.ModifierKeyMatches(PrimaryKey, keyEvent);
6161
}

RuntimeInput/RuntimeHotkeyParser.cs

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,9 @@ internal static bool ModifierKeyMatches(Key expectedKey, InputEventKey keyEvent)
137137

138138
private static bool IsModifierPressed(ModifierKind kind, InputEventKey keyEvent)
139139
{
140+
if (GetModifierKindForKeyEvent(keyEvent) == kind)
141+
return true;
142+
140143
return kind switch
141144
{
142145
ModifierKind.Ctrl => keyEvent.CtrlPressed,
@@ -294,17 +297,25 @@ private static Key ModifierRequirementToPrimaryKey(ModifierKind kind, ModifierRe
294297
{
295298
return (kind, requirement) switch
296299
{
297-
(ModifierKind.Ctrl, ModifierRequirement.LeftOnly) => ParseKnownKey("Ctrl") ?? Key.Ctrl,
298-
(ModifierKind.Ctrl, ModifierRequirement.RightOnly) => ParseKnownKey("Ctrl") ?? Key.Ctrl,
300+
(ModifierKind.Ctrl, ModifierRequirement.LeftOnly) =>
301+
ParseKnownKey("LeftCtrl") ?? ParseKnownKey("Ctrl") ?? Key.Ctrl,
302+
(ModifierKind.Ctrl, ModifierRequirement.RightOnly) =>
303+
ParseKnownKey("RightCtrl") ?? ParseKnownKey("Ctrl") ?? Key.Ctrl,
299304
(ModifierKind.Ctrl, _) => Key.Ctrl,
300-
(ModifierKind.Alt, ModifierRequirement.LeftOnly) => ParseKnownKey("Alt") ?? Key.Alt,
301-
(ModifierKind.Alt, ModifierRequirement.RightOnly) => ParseKnownKey("Alt") ?? Key.Alt,
305+
(ModifierKind.Alt, ModifierRequirement.LeftOnly) =>
306+
ParseKnownKey("LeftAlt") ?? ParseKnownKey("Alt") ?? Key.Alt,
307+
(ModifierKind.Alt, ModifierRequirement.RightOnly) =>
308+
ParseKnownKey("RightAlt") ?? ParseKnownKey("Alt") ?? Key.Alt,
302309
(ModifierKind.Alt, _) => Key.Alt,
303-
(ModifierKind.Shift, ModifierRequirement.LeftOnly) => ParseKnownKey("Shift") ?? Key.Shift,
304-
(ModifierKind.Shift, ModifierRequirement.RightOnly) => ParseKnownKey("Shift") ?? Key.Shift,
310+
(ModifierKind.Shift, ModifierRequirement.LeftOnly) =>
311+
ParseKnownKey("LeftShift") ?? ParseKnownKey("Shift") ?? Key.Shift,
312+
(ModifierKind.Shift, ModifierRequirement.RightOnly) =>
313+
ParseKnownKey("RightShift") ?? ParseKnownKey("Shift") ?? Key.Shift,
305314
(ModifierKind.Shift, _) => Key.Shift,
306-
(ModifierKind.Meta, ModifierRequirement.LeftOnly) => ParseKnownKey("Meta") ?? Key.Meta,
307-
(ModifierKind.Meta, ModifierRequirement.RightOnly) => ParseKnownKey("Meta") ?? Key.Meta,
315+
(ModifierKind.Meta, ModifierRequirement.LeftOnly) =>
316+
ParseKnownKey("LeftMeta") ?? ParseKnownKey("Meta") ?? Key.Meta,
317+
(ModifierKind.Meta, ModifierRequirement.RightOnly) =>
318+
ParseKnownKey("RightMeta") ?? ParseKnownKey("Meta") ?? Key.Meta,
308319
(ModifierKind.Meta, _) => Key.Meta,
309320
_ => Key.None,
310321
};

0 commit comments

Comments
 (0)