Browse Source

re-create NSWindow if we call show and need to swap out for a dialog.

pull/8091/head
Dan Walmsley 4 years ago
parent
commit
3600639d39
  1. 4
      native/Avalonia.Native/src/OSX/AvnWindow.mm
  2. 1
      native/Avalonia.Native/src/OSX/WindowBaseImpl.h
  3. 21
      native/Avalonia.Native/src/OSX/WindowBaseImpl.mm
  4. 1
      native/Avalonia.Native/src/OSX/WindowProtocol.h

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

@ -433,5 +433,9 @@
}
}
- (void)disconnectParent {
_parent = nullptr;
}
@end

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

@ -123,6 +123,7 @@ protected:
private:
void CreateNSWindow (bool isDialog);
void CleanNSWindow ();
void InitialiseNSWindow ();
};

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

@ -525,14 +525,25 @@ void WindowBaseImpl::UpdateStyle() {
[Window setStyleMask:GetStyle()];
}
void WindowBaseImpl::CleanNSWindow() {
if(Window != nullptr) {
[GetWindowProtocol() disconnectParent];
[Window close];
Window = nullptr;
}
}
void WindowBaseImpl::CreateNSWindow(bool isDialog) {
if(Window == nullptr) {
if(isDialog)
{
if (isDialog) {
if (![Window isKindOfClass:[AvnPanel class]]) {
CleanNSWindow();
Window = [[AvnPanel alloc] initWithParent:this contentRect:NSRect{0, 0, lastSize} styleMask:GetStyle()];
}
else
{
} else {
if (![Window isKindOfClass:[AvnWindow class]]) {
CleanNSWindow();
Window = [[AvnWindow alloc] initWithParent:this contentRect:NSRect{0, 0, lastSize} styleMask:GetStyle()];
}
}

1
native/Avalonia.Native/src/OSX/WindowProtocol.h

@ -20,5 +20,6 @@
-(double) getExtendedTitleBarHeight;
-(void) setIsExtended:(bool)value;
-(void) disconnectParent;
-(bool) isDialog;
@end
Loading…
Cancel
Save