diff --git a/src/Avalonia.Input/IKeyboardDevice.cs b/src/Avalonia.Input/IKeyboardDevice.cs index 1410476267..421d097e7a 100644 --- a/src/Avalonia.Input/IKeyboardDevice.cs +++ b/src/Avalonia.Input/IKeyboardDevice.cs @@ -14,9 +14,10 @@ namespace Avalonia.Input Control = 2, Shift = 4, Windows = 8, - LeftMouseButton = 16, - RightMouseButton = 32, - MiddleMouseButton = 64 + Command = 16, // Special case CMD on OSX, CTRL on other platforms. + LeftMouseButton = 32, + RightMouseButton = 64, + MiddleMouseButton = 128 } [Flags] diff --git a/src/OSX/Avalonia.MonoMac/TopLevelImpl.cs b/src/OSX/Avalonia.MonoMac/TopLevelImpl.cs index fb4c5afc2d..b47b795faf 100644 --- a/src/OSX/Avalonia.MonoMac/TopLevelImpl.cs +++ b/src/OSX/Avalonia.MonoMac/TopLevelImpl.cs @@ -224,13 +224,16 @@ namespace Avalonia.MonoMac { var rv = new InputModifiers(); if (mod.HasFlag(NSEventModifierMask.ControlKeyMask)) - rv |= InputModifiers.Control; + {rv |= InputModifiers.Control; if (mod.HasFlag(NSEventModifierMask.ShiftKeyMask)) rv |= InputModifiers.Shift; if (mod.HasFlag(NSEventModifierMask.AlternateKeyMask)) rv |= InputModifiers.Alt; if (mod.HasFlag(NSEventModifierMask.CommandKeyMask)) + { rv |= InputModifiers.Windows; + rv = InputModifiers.Command; + } if (_isLeftPressed) rv |= InputModifiers.LeftMouseButton; diff --git a/src/Windows/Avalonia.Win32.Interop/Wpf/WpfTopLevelImpl.cs b/src/Windows/Avalonia.Win32.Interop/Wpf/WpfTopLevelImpl.cs index b5fb158168..b95cd22922 100644 --- a/src/Windows/Avalonia.Win32.Interop/Wpf/WpfTopLevelImpl.cs +++ b/src/Windows/Avalonia.Win32.Interop/Wpf/WpfTopLevelImpl.cs @@ -151,7 +151,10 @@ namespace Avalonia.Win32.Interop.Wpf if (state.HasFlag(ModifierKeys.Alt)) rv |= InputModifiers.Alt; if (state.HasFlag(ModifierKeys.Control)) + { rv |= InputModifiers.Control; + rv |= InputModifiers.Command; + } if (state.HasFlag(ModifierKeys.Shift)) rv |= InputModifiers.Shift; //TODO: mouse modifiers diff --git a/src/Windows/Avalonia.Win32/Input/WindowsKeyboardDevice.cs b/src/Windows/Avalonia.Win32/Input/WindowsKeyboardDevice.cs index fee1fe2ae6..90c621006b 100644 --- a/src/Windows/Avalonia.Win32/Input/WindowsKeyboardDevice.cs +++ b/src/Windows/Avalonia.Win32/Input/WindowsKeyboardDevice.cs @@ -29,6 +29,7 @@ namespace Avalonia.Win32.Input if (IsDown(Key.LeftCtrl) || IsDown(Key.RightCtrl)) { result |= InputModifiers.Control; + result |= InputModifiers.Command; } if (IsDown(Key.LeftShift) || IsDown(Key.RightShift)) diff --git a/src/Windows/Avalonia.Win32/OleDropTarget.cs b/src/Windows/Avalonia.Win32/OleDropTarget.cs index 7013931be9..c8ebb2bb85 100644 --- a/src/Windows/Avalonia.Win32/OleDropTarget.cs +++ b/src/Windows/Avalonia.Win32/OleDropTarget.cs @@ -59,7 +59,10 @@ namespace Avalonia.Win32 if (state.HasFlag(UnmanagedMethods.ModifierKeys.MK_SHIFT)) modifiers |= InputModifiers.Shift; if (state.HasFlag(UnmanagedMethods.ModifierKeys.MK_CONTROL)) + { modifiers |= InputModifiers.Control; + modifiers |= InputModifiers.Command; + } if (state.HasFlag(UnmanagedMethods.ModifierKeys.MK_ALT)) modifiers |= InputModifiers.Alt; return modifiers;