Browse Source

ensure menu gets applied.

pull/8091/head
Dan Walmsley 4 years ago
parent
commit
cd9be07ced
  1. 1
      native/Avalonia.Native/src/OSX/WindowBaseImpl.h
  2. 36
      native/Avalonia.Native/src/OSX/WindowBaseImpl.mm
  3. 1
      native/Avalonia.Native/src/OSX/WindowImpl.mm

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

@ -37,6 +37,7 @@ BEGIN_INTERFACE_MAP()
NSSize lastSize; NSSize lastSize;
NSSize lastMinSize; NSSize lastMinSize;
NSSize lastMaxSize; NSSize lastMaxSize;
AvnMenu* lastMenu;
NSString *_lastTitle; NSString *_lastTitle;
bool _shown; bool _shown;

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

@ -34,6 +34,7 @@ WindowBaseImpl::WindowBaseImpl(IAvnWindowBaseEvents *events, IAvnGlContext *gl)
_lastTitle = @""; _lastTitle = @"";
Window = nullptr; Window = nullptr;
lastMenu = nullptr;
} }
HRESULT WindowBaseImpl::ObtainNSViewHandle(void **ret) { HRESULT WindowBaseImpl::ObtainNSViewHandle(void **ret) {
@ -91,6 +92,10 @@ HRESULT WindowBaseImpl::Show(bool activate, bool isDialog) {
[Window setTitle:_lastTitle]; [Window setTitle:_lastTitle];
if(!isDialog) {
[GetWindowProtocol() setCanBecomeKeyAndMain];
}
if (ShouldTakeFocusOnShow() && activate) { if (ShouldTakeFocusOnShow() && activate) {
[Window orderFront:Window]; [Window orderFront:Window];
[Window makeKeyAndOrderFront:Window]; [Window makeKeyAndOrderFront:Window];
@ -306,12 +311,14 @@ HRESULT WindowBaseImpl::SetMainMenu(IAvnMenu *menu) {
auto nativeMenu = dynamic_cast<AvnAppMenu *>(menu); auto nativeMenu = dynamic_cast<AvnAppMenu *>(menu);
auto nsmenu = nativeMenu->GetNative(); lastMenu = nativeMenu->GetNative();
[GetWindowProtocol() applyMenu:nsmenu]; if(Window != nullptr) {
[GetWindowProtocol() applyMenu:lastMenu];
if ([Window isKeyWindow]) { if ([Window isKeyWindow]) {
[GetWindowProtocol() showWindowMenuWithAppMenu]; [GetWindowProtocol() showWindowMenuWithAppMenu];
}
} }
return S_OK; return S_OK;
@ -524,17 +531,30 @@ void WindowBaseImpl::InitialiseNSWindow() {
[Window setStyleMask:NSWindowStyleMaskBorderless]; [Window setStyleMask:NSWindowStyleMaskBorderless];
[Window setBackingType:NSBackingStoreBuffered]; [Window setBackingType:NSBackingStoreBuffered];
[Window setContentSize: lastSize]; [Window setContentSize:lastSize];
[Window setContentMinSize:lastMinSize]; [Window setContentMinSize:lastMinSize];
[Window setContentMaxSize:lastMaxSize]; [Window setContentMaxSize:lastMaxSize];
[Window setOpaque:false]; [Window setOpaque:false];
[Window setContentMinSize: lastMinSize]; [Window setContentMinSize:lastMinSize];
[Window setContentMaxSize: lastMaxSize]; [Window setContentMaxSize:lastMaxSize];
if (lastMenu != nullptr) {
[GetWindowProtocol() applyMenu:lastMenu];
if ([Window isKeyWindow]) {
[GetWindowProtocol() showWindowMenuWithAppMenu];
}
}
} }
} }
id <AvnWindowProtocol> WindowBaseImpl::GetWindowProtocol() { id <AvnWindowProtocol> WindowBaseImpl::GetWindowProtocol() {
return static_cast<id <AvnWindowProtocol>>(Window); id instance;
if ([Window conformsToProtocol:@protocol(AvnWindowProtocol)]) {
instance = Window;
}
return instance;
} }

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

@ -20,7 +20,6 @@ WindowImpl::WindowImpl(IAvnWindowEvents *events, IAvnGlContext *gl) : WindowBase
_lastWindowState = Normal; _lastWindowState = Normal;
_actualWindowState = Normal; _actualWindowState = Normal;
WindowEvents = events; WindowEvents = events;
[GetWindowProtocol() setCanBecomeKeyAndMain];
[Window disableCursorRects]; [Window disableCursorRects];
[Window setTabbingMode:NSWindowTabbingModeDisallowed]; [Window setTabbingMode:NSWindowTabbingModeDisallowed];
[Window setCollectionBehavior:NSWindowCollectionBehaviorFullScreenPrimary]; [Window setCollectionBehavior:NSWindowCollectionBehaviorFullScreenPrimary];

Loading…
Cancel
Save