diff --git a/native/Avalonia.Native/src/OSX/AvnView.mm b/native/Avalonia.Native/src/OSX/AvnView.mm index 7110a067bb..4cc495f321 100644 --- a/native/Avalonia.Native/src/OSX/AvnView.mm +++ b/native/Avalonia.Native/src/OSX/AvnView.mm @@ -13,7 +13,6 @@ { ComObjectWeakPtr _parent; NSTrackingArea* _area; - bool _isLeftPressed, _isMiddlePressed, _isRightPressed, _isXButton1Pressed, _isXButton2Pressed; AvnInputModifiers _modifierState; NSEvent* _lastMouseDownEvent; AvnPixelSize _lastPixelSize; @@ -446,7 +445,6 @@ static void ConvertTilt(NSPoint tilt, float* xTilt, float* yTilt) - (void)mouseDown:(NSEvent *)event { - _isLeftPressed = true; _lastMouseDownEvent = event; [self mouseEvent:event withType:LeftButtonDown]; } @@ -459,15 +457,12 @@ static void ConvertTilt(NSPoint tilt, float* xTilt, float* yTilt) { case 2: case 3: - _isMiddlePressed = true; [self mouseEvent:event withType:MiddleButtonDown]; break; case 4: - _isXButton1Pressed = true; [self mouseEvent:event withType:XButton1Down]; break; case 5: - _isXButton2Pressed = true; [self mouseEvent:event withType:XButton2Down]; break; @@ -478,14 +473,12 @@ static void ConvertTilt(NSPoint tilt, float* xTilt, float* yTilt) - (void)rightMouseDown:(NSEvent *)event { - _isRightPressed = true; _lastMouseDownEvent = event; [self mouseEvent:event withType:RightButtonDown]; } - (void)mouseUp:(NSEvent *)event { - _isLeftPressed = false; [self mouseEvent:event withType:LeftButtonUp]; } @@ -495,15 +488,12 @@ static void ConvertTilt(NSPoint tilt, float* xTilt, float* yTilt) { case 2: case 3: - _isMiddlePressed = false; [self mouseEvent:event withType:MiddleButtonUp]; break; case 4: - _isXButton1Pressed = false; [self mouseEvent:event withType:XButton1Up]; break; case 5: - _isXButton2Pressed = false; [self mouseEvent:event withType:XButton2Up]; break; @@ -514,7 +504,6 @@ static void ConvertTilt(NSPoint tilt, float* xTilt, float* yTilt) - (void)rightMouseUp:(NSEvent *)event { - _isRightPressed = false; [self mouseEvent:event withType:RightButtonUp]; } @@ -597,15 +586,6 @@ static void ConvertTilt(NSPoint tilt, float* xTilt, float* yTilt) _modifierState = [self getModifiers:modifierFlags]; } -- (void)resetPressedMouseButtons -{ - _isLeftPressed = false; - _isRightPressed = false; - _isMiddlePressed = false; - _isXButton1Pressed = false; - _isXButton2Pressed = false; -} - - (void)flagsChanged:(NSEvent *)event { auto newModifierState = [self getModifiers:[event modifierFlags]]; @@ -752,15 +732,17 @@ static void ConvertTilt(NSPoint tilt, float* xTilt, float* yTilt) if (mod & NSEventModifierFlagCommand) rv |= Windows; - if (_isLeftPressed) + NSUInteger pressedButtons = [NSEvent pressedMouseButtons]; + + if (pressedButtons & (1 << 0)) // Left mouse button rv |= LeftMouseButton; - if (_isMiddlePressed) - rv |= MiddleMouseButton; - if (_isRightPressed) + if (pressedButtons & (1 << 1)) // Right mouse button rv |= RightMouseButton; - if (_isXButton1Pressed) + if (pressedButtons & (1 << 2)) // Middle mouse button + rv |= MiddleMouseButton; + if (pressedButtons & (1 << 3)) // X1 button rv |= XButton1MouseButton; - if (_isXButton2Pressed) + if (pressedButtons & (1 << 4)) // X2 button rv |= XButton2MouseButton; return (AvnInputModifiers)rv;