Browse Source

Merge pull request #3699 from AvaloniaUI/fixes/osx-dont-zoom-when-normal-state-selected

OSX backend calls OnResized to keep WindowState inSync.
# Conflicts:
#	native/Avalonia.Native/src/OSX/window.mm
release/0.9.6
danwalmsley 6 years ago
committed by Dan Walmsley
parent
commit
757220107b
  1. 95
      native/Avalonia.Native/src/OSX/window.mm

95
native/Avalonia.Native/src/OSX/window.mm

@ -31,9 +31,11 @@ public:
AvnPoint lastPositionSet; AvnPoint lastPositionSet;
NSString* _lastTitle; NSString* _lastTitle;
IAvnAppMenu* _mainMenu; IAvnAppMenu* _mainMenu;
bool _shown;
WindowBaseImpl(IAvnWindowBaseEvents* events, IAvnGlContext* gl) WindowBaseImpl(IAvnWindowBaseEvents* events, IAvnGlContext* gl)
{ {
_shown = false;
_mainMenu = nullptr; _mainMenu = nullptr;
BaseEvents = events; BaseEvents = events;
_glContext = gl; _glContext = gl;
@ -116,6 +118,8 @@ public:
[Window setTitle:_lastTitle]; [Window setTitle:_lastTitle];
[Window setTitleVisibility:NSWindowTitleVisible]; [Window setTitleVisibility:NSWindowTitleVisible];
_shown = true;
return S_OK; return S_OK;
} }
@ -401,6 +405,7 @@ protected:
[Window setStyleMask:GetStyle()]; [Window setStyleMask:GetStyle()];
} }
public:
virtual void OnResized () virtual void OnResized ()
{ {
@ -592,57 +597,63 @@ private:
{ {
_lastWindowState = state; _lastWindowState = state;
switch (state) { if(_shown)
case Maximized: {
lastPositionSet.X = 0; switch (state) {
lastPositionSet.Y = 0; case Maximized:
lastPositionSet.X = 0;
if([Window isMiniaturized]) lastPositionSet.Y = 0;
{
[Window deminiaturize:Window]; if([Window isMiniaturized])
} {
[Window deminiaturize:Window];
if(!IsZoomed()) }
{
DoZoom(); if(!IsZoomed())
} {
break; DoZoom();
}
case Minimized: break;
[Window miniaturize:Window];
break; case Minimized:
[Window miniaturize:Window];
default: break;
if([Window isMiniaturized])
{ default:
[Window deminiaturize:Window]; if([Window isMiniaturized])
} {
[Window deminiaturize:Window];
if(IsZoomed()) }
{
DoZoom(); if(IsZoomed())
} {
break; DoZoom();
}
break;
}
} }
return S_OK; return S_OK;
} }
} }
protected:
virtual void OnResized () override virtual void OnResized () override
{ {
auto windowState = [Window isMiniaturized] ? Minimized if(_shown)
: (IsZoomed() ? Maximized : Normal);
if (windowState != _lastWindowState)
{ {
_lastWindowState = windowState; auto windowState = [Window isMiniaturized] ? Minimized
: (IsZoomed() ? Maximized : Normal);
WindowEvents->WindowStateChanged(windowState); if (windowState != _lastWindowState)
{
_lastWindowState = windowState;
WindowEvents->WindowStateChanged(windowState);
}
} }
} }
protected:
virtual NSWindowStyleMask GetStyle() override virtual NSWindowStyleMask GetStyle() override
{ {
unsigned long s = NSWindowStyleMaskBorderless; unsigned long s = NSWindowStyleMaskBorderless;
@ -1290,6 +1301,11 @@ NSArray* AllLoopModes = [NSArray arrayWithObjects: NSDefaultRunLoopMode, NSEvent
} }
} }
- (void)windowDidResize:(NSNotification *)notification
{
_parent->OnResized();
}
- (BOOL)windowShouldZoom:(NSWindow *)window toFrame:(NSRect)newFrame - (BOOL)windowShouldZoom:(NSWindow *)window toFrame:(NSRect)newFrame
{ {
return true; return true;
@ -1360,6 +1376,7 @@ protected:
[Window setContentSize:NSSize{x, y}]; [Window setContentSize:NSSize{x, y}];
[Window setFrameTopLeftPoint:ToNSPoint(ConvertPointY(lastPositionSet))]; [Window setFrameTopLeftPoint:ToNSPoint(ConvertPointY(lastPositionSet))];
return S_OK; return S_OK;
} }
} }

Loading…
Cancel
Save