Browse Source

implement app menu osx.

Dan Walmsley 6 years ago
parent
commit
c17058c9aa

+ 4 - 1
native/Avalonia.Native/src/OSX/menu.mm

@@ -159,7 +159,10 @@ HRESULT AvnAppMenu::RemoveItem (IAvnAppMenuItem* item)
 
 HRESULT AvnAppMenu::SetTitle (void* utf8String)
 {
-    [_native setTitle:[NSString stringWithUTF8String:(const char*)utf8String]];
+    if (utf8String != nullptr)
+    {
+        [_native setTitle:[NSString stringWithUTF8String:(const char*)utf8String]];
+    }
     
     return S_OK;
 }

+ 8 - 1
src/Avalonia.Native/AvaloniaNativeMenuExporter.cs

@@ -54,6 +54,8 @@ namespace Avalonia.Native
         {
             _factory = factory;
             _nativeWindow = nativeWindow;
+
+            DoLayoutReset();
         }
 
         public bool IsNativeMenuExported => _exported;
@@ -107,7 +109,7 @@ namespace Avalonia.Native
 
             _menuItems.Clear();
 
-            SetMenu(_nativeWindow, _menu.Items);
+            SetMenu(_nativeWindow, _menu?.Items);
 
             _exported = true;
         }
@@ -236,6 +238,11 @@ namespace Avalonia.Native
 
         private void SetMenu(IAvnWindow avnWindow, ICollection<NativeMenuItem> menuItems)
         {
+            if (menuItems is null)
+            {
+                menuItems = new List<NativeMenuItem>();
+            }
+
             var menu = NativeMenu.GetMenu(Application.Current);
 
             if (menu != null)