diff --git a/src/Avalonia.Native.OSX/window.mm b/src/Avalonia.Native.OSX/window.mm index 3b115ee671..f69bec5704 100644 --- a/src/Avalonia.Native.OSX/window.mm +++ b/src/Avalonia.Native.OSX/window.mm @@ -4,6 +4,7 @@ class WindowBaseImpl; @interface AvnView : NSView -(AvnView*) initWithParent: (WindowBaseImpl*) parent; +-(NSEvent*) lastMouseDownEvent; @end @interface AvnWindow : NSWindow @@ -11,9 +12,6 @@ class WindowBaseImpl; -(void) setCanBecomeKeyAndMain; @end - - - class WindowBaseImpl : public ComSingleObject { public: @@ -64,6 +62,18 @@ public: [View setNeedsDisplayInRect:[View frame]]; } + virtual void BeginMoveDrag () + { + auto lastEvent = [View lastMouseDownEvent]; + + if(lastEvent == nullptr) + { + return; + } + + [Window performWindowDragWithEvent:lastEvent]; + } + protected: virtual NSWindowStyleMask GetStyle() { @@ -74,8 +84,6 @@ protected: { [Window setStyleMask:GetStyle()]; } - - }; @implementation AvnView @@ -86,6 +94,11 @@ protected: NSEvent* _lastMouseDownEvent; } +- (NSEvent*) lastMouseDownEvent +{ + return _lastMouseDownEvent; +} + -(AvnView*) initWithParent: (WindowBaseImpl*) parent { self = [super init]; diff --git a/src/Avalonia.Native/WindowImplBase.cs b/src/Avalonia.Native/WindowImplBase.cs index a14c38b011..9f1a7deedb 100644 --- a/src/Avalonia.Native/WindowImplBase.cs +++ b/src/Avalonia.Native/WindowImplBase.cs @@ -182,8 +182,6 @@ namespace Avalonia.Native Action ITopLevelImpl.ScalingChanged { get; set; } - - public void SetTopmost(bool value) { } @@ -197,13 +195,13 @@ namespace Avalonia.Native { } - - public void Hide() { } + public void BeginMoveDrag() { + _native.BeginMoveDrag(); } public void BeginResizeDrag(WindowEdge edge) diff --git a/src/headers/avalonia-native.h b/src/headers/avalonia-native.h index 3082e4b7fd..1509f01a57 100644 --- a/src/headers/avalonia-native.h +++ b/src/headers/avalonia-native.h @@ -69,6 +69,7 @@ AVNCOM(IAvnWindowBase, 02) : virtual IUnknown virtual HRESULT GetClientSize(AvnSize*ret) = 0; virtual HRESULT Resize(double width, double height) = 0; virtual void Invalidate (AvnRect rect) = 0; + virtual void BeginMoveDrag () = 0; }; AVNCOM(IAvnWindow, 03) : virtual IAvnWindowBase