From 24dd2b4459980dd379652485d9b005dec4f39483 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Fri, 1 May 2020 18:04:26 -0300 Subject: [PATCH] [OSX] borderless window can transistion from FullScreen to Maximised correctly. --- native/Avalonia.Native/src/OSX/window.h | 2 ++ native/Avalonia.Native/src/OSX/window.mm | 17 +++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/native/Avalonia.Native/src/OSX/window.h b/native/Avalonia.Native/src/OSX/window.h index 14fa054cbf..ec8fe9e6ee 100644 --- a/native/Avalonia.Native/src/OSX/window.h +++ b/native/Avalonia.Native/src/OSX/window.h @@ -37,6 +37,8 @@ struct IWindowStateChanged virtual void WindowStateChanged () = 0; virtual void StartStateTransition () = 0; virtual void EndStateTransition () = 0; + virtual SystemDecorations Decorations () = 0; + virtual AvnWindowState WindowState () = 0; }; #endif /* window_h */ diff --git a/native/Avalonia.Native/src/OSX/window.mm b/native/Avalonia.Native/src/OSX/window.mm index 50e04d9def..f8dc07063e 100644 --- a/native/Avalonia.Native/src/OSX/window.mm +++ b/native/Avalonia.Native/src/OSX/window.mm @@ -499,6 +499,16 @@ private: _transitioningWindowState = false; } + SystemDecorations Decorations () override + { + return _decorations; + } + + AvnWindowState WindowState () override + { + return _lastWindowState; + } + void WindowStateChanged () override { if(!_inSetWindowState && !_transitioningWindowState) @@ -1587,6 +1597,13 @@ NSArray* AllLoopModes = [NSArray arrayWithObjects: NSDefaultRunLoopMode, NSEvent if(parent != nullptr) { parent->EndStateTransition(); + + if(parent->Decorations() != SystemDecorationsFull && parent->WindowState() == Maximized) + { + NSRect screenRect = [[self screen] visibleFrame]; + [self setFrame:screenRect display:YES]; + } + parent->WindowStateChanged(); } }