Browse Source

Modal window flag for OSX

pull/3867/head
Dariusz Komosinski 7 years ago
parent
commit
6ee5543522
  1. 2
      native/Avalonia.Native/src/OSX/window.h
  2. 20
      native/Avalonia.Native/src/OSX/window.mm

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

@ -19,6 +19,8 @@ class WindowBaseImpl;
-(void) pollModalSession: (NSModalSession _Nonnull) session; -(void) pollModalSession: (NSModalSession _Nonnull) session;
-(void) restoreParentWindow; -(void) restoreParentWindow;
-(bool) shouldTryToHandleEvents; -(bool) shouldTryToHandleEvents;
-(bool) isModal;
-(void) setModal: (bool) isModal;
-(void) showAppMenuOnly; -(void) showAppMenuOnly;
-(void) showWindowMenuWithAppMenu; -(void) showWindowMenuWithAppMenu;
-(void) applyMenu:(NSMenu* _Nullable)menu; -(void) applyMenu:(NSMenu* _Nullable)menu;

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

@ -433,6 +433,9 @@ private:
{ {
if([Window parentWindow] != nil) if([Window parentWindow] != nil)
[[Window parentWindow] removeChildWindow:Window]; [[Window parentWindow] removeChildWindow:Window];
[Window setModal:FALSE];
WindowBaseImpl::Show(); WindowBaseImpl::Show();
return SetWindowState(_lastWindowState); return SetWindowState(_lastWindowState);
@ -450,6 +453,8 @@ private:
if(cparent == nullptr) if(cparent == nullptr)
return E_INVALIDARG; return E_INVALIDARG;
[Window setModal:TRUE];
[cparent->Window addChildWindow:Window ordered:NSWindowAbove]; [cparent->Window addChildWindow:Window ordered:NSWindowAbove];
WindowBaseImpl::Show(); WindowBaseImpl::Show();
@ -1144,6 +1149,7 @@ NSArray* AllLoopModes = [NSArray arrayWithObjects: NSDefaultRunLoopMode, NSEvent
ComPtr<WindowBaseImpl> _parent; ComPtr<WindowBaseImpl> _parent;
bool _canBecomeKeyAndMain; bool _canBecomeKeyAndMain;
bool _closed; bool _closed;
bool _isModal;
AvnMenu* _menu; AvnMenu* _menu;
double _lastScaling; double _lastScaling;
} }
@ -1322,11 +1328,25 @@ NSArray* AllLoopModes = [NSArray arrayWithObjects: NSDefaultRunLoopMode, NSEvent
auto ch = objc_cast<AvnWindow>(uch); auto ch = objc_cast<AvnWindow>(uch);
if(ch == nil) if(ch == nil)
continue; continue;
if(![ch isModal])
continue;
return FALSE; return FALSE;
} }
return TRUE; return TRUE;
} }
-(bool) isModal
{
return _isModal;
}
-(void) setModal: (bool) isModal
{
_isModal = isModal;
}
-(void)makeKeyWindow -(void)makeKeyWindow
{ {
if([self activateAppropriateChild: true]) if([self activateAppropriateChild: true])

Loading…
Cancel
Save