Browse Source

[OSX] ensure window state is obeyed.

pull/8154/head
Dan Walmsley 4 years ago
parent
commit
3faebf205a
  1. 7
      native/Avalonia.Native/src/OSX/AvnWindow.mm
  2. 2
      native/Avalonia.Native/src/OSX/WindowBaseImpl.h
  3. 6
      native/Avalonia.Native/src/OSX/WindowBaseImpl.mm
  4. 6
      native/Avalonia.Native/src/OSX/WindowImpl.mm

7
native/Avalonia.Native/src/OSX/AvnWindow.mm

@ -199,6 +199,8 @@
[self backingScaleFactor]; [self backingScaleFactor];
} }
- (void)windowWillClose:(NSNotification *)notification - (void)windowWillClose:(NSNotification *)notification
{ {
_closed = true; _closed = true;
@ -380,6 +382,11 @@
if(cparent != nullptr) if(cparent != nullptr)
{ {
if(!cparent->IsShown())
{
return;
}
if(cparent->WindowState() == Maximized) if(cparent->WindowState() == Maximized)
{ {
cparent->SetWindowState(Normal); cparent->SetWindowState(Normal);

2
native/Avalonia.Native/src/OSX/WindowBaseImpl.h

@ -60,6 +60,8 @@ BEGIN_INTERFACE_MAP()
virtual HRESULT Show(bool activate, bool isDialog) override; virtual HRESULT Show(bool activate, bool isDialog) override;
virtual bool IsShown ();
virtual bool ShouldTakeFocusOnShow(); virtual bool ShouldTakeFocusOnShow();
virtual HRESULT Hide() override; virtual HRESULT Hide() override;

6
native/Avalonia.Native/src/OSX/WindowBaseImpl.mm

@ -116,6 +116,11 @@ HRESULT WindowBaseImpl::Show(bool activate, bool isDialog) {
} }
} }
bool WindowBaseImpl::IsShown ()
{
return _shown;
}
bool WindowBaseImpl::ShouldTakeFocusOnShow() { bool WindowBaseImpl::ShouldTakeFocusOnShow() {
return true; return true;
} }
@ -567,7 +572,6 @@ void WindowBaseImpl::InitialiseNSWindow() {
[Window setContentMaxSize:lastMaxSize]; [Window setContentMaxSize:lastMaxSize];
[Window setOpaque:false]; [Window setOpaque:false];
[Window center]; [Window center];
if (lastMenu != nullptr) { if (lastMenu != nullptr) {

6
native/Avalonia.Native/src/OSX/WindowImpl.mm

@ -430,6 +430,9 @@ HRESULT WindowImpl::SetWindowState(AvnWindowState state) {
START_COM_CALL; START_COM_CALL;
@autoreleasepool { @autoreleasepool {
auto currentState = _actualWindowState;
_lastWindowState = state;
if (Window == nullptr) { if (Window == nullptr) {
return S_OK; return S_OK;
} }
@ -440,9 +443,6 @@ HRESULT WindowImpl::SetWindowState(AvnWindowState state) {
_inSetWindowState = true; _inSetWindowState = true;
auto currentState = _actualWindowState;
_lastWindowState = state;
if (currentState == Normal) { if (currentState == Normal) {
_preZoomSize = [Window frame]; _preZoomSize = [Window frame];
} }

Loading…
Cancel
Save