diff options
author | Marius Ungureanu <marius.ungureanu@xamarin.com> | 2022-03-03 17:40:23 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-03 17:40:23 +0300 |
commit | 5a0fb30747192a577a5abf27772becc172a4d135 (patch) | |
tree | ece1eaca0390a40e0dc6a5e93f3ccf5ba891c976 | |
parent | 45d2cb2c968afceabdb1cb8bf9200a5603fbda6c (diff) | |
parent | fd28876f98e55dff8e94d8fcc425d9cb5102a08f (diff) |
Merge pull request #1088 from mono/dev/therzok/keycode-fixes
Fix up KeyboardUtil so it doesn't marshal strings unnecessarily multi…
-rw-r--r-- | Xwt.XamMac/Xwt.Mac/KeyboardUtil.cs | 23 |
1 files changed, 9 insertions, 14 deletions
diff --git a/Xwt.XamMac/Xwt.Mac/KeyboardUtil.cs b/Xwt.XamMac/Xwt.Mac/KeyboardUtil.cs index a2e317da..8fd72784 100644 --- a/Xwt.XamMac/Xwt.Mac/KeyboardUtil.cs +++ b/Xwt.XamMac/Xwt.Mac/KeyboardUtil.cs @@ -33,19 +33,16 @@ namespace Xwt.Mac { public static KeyEventArgs ToXwtKeyEventArgs (this NSEvent keyEvent) { - NSEventModifierMask mask; - Key key = GetXwtKey(keyEvent, out mask); - ModifierKeys mod = mask.ToXwtValue (); - return new KeyEventArgs (key, keyEvent.KeyCode, mod, keyEvent.IsARepeat, (long)TimeSpan.FromSeconds (keyEvent.Timestamp).TotalMilliseconds, keyEvent.Characters, keyEvent.CharactersIgnoringModifiers, keyEvent); + var characters = keyEvent.Characters; + var charactersIgnoringModifiers = keyEvent.CharactersIgnoringModifiers; + var keyCode = keyEvent.KeyCode; + var modifierFlags = keyEvent.ModifierFlags; + + Key key = GetXwtKey(keyCode); + return new KeyEventArgs (key, keyCode, modifierFlags.ToXwtValue(), keyEvent.IsARepeat, (long)TimeSpan.FromSeconds (keyEvent.Timestamp).TotalMilliseconds, characters, charactersIgnoringModifiers, keyEvent); } - static Key RemoveShift(Key key, ref NSEventModifierMask mask) - { - mask &= ~NSEventModifierMask.ShiftKeyMask; - return key; - } - - static Key GetXwtKey (NSEvent keyEvent, out NSEventModifierMask modMask) + static Key GetXwtKey (ushort keyCode) { // NSEvent.KeyCode is the physical key pressed according to an ANSI US keyboard. // With this pressing the м key on a Cyrillac keyboard or ㅍ in Korean both return v @@ -54,10 +51,8 @@ namespace Xwt.Mac // For compatibility reasons the Key field parses Characters/CharactersIgnoringModifiers into a // Xwt.Key enum value, but most of unicode characters are not parsed so KeyEventArgs.Key probably // should be considered obsolete. - modMask = keyEvent.ModifierFlags; - // special keys - switch (keyEvent.KeyCode) { + switch (keyCode) { case 0: return Key.a; case 1: return Key.s; case 2: return Key.d; |