Ver código fonte

Merge branch 'master' into fixes/Issue_5578

Dariusz Komosiński 4 anos atrás
pai
commit
461a4090a1

+ 2 - 0
native/Avalonia.Native/src/OSX/common.h

@@ -28,6 +28,8 @@ extern IAvnNativeControlHost* CreateNativeControlHost(NSView* parent);
 extern void SetAppMenu (NSString* appName, IAvnMenu* appMenu);
 extern IAvnMenu* GetAppMenu ();
 extern NSMenuItem* GetAppMenuItem ();
+extern void SetAutoGenerateDefaultAppMenuItems (bool enabled);
+extern bool GetAutoGenerateDefaultAppMenuItems ();
 
 extern void InitializeAvnApp();
 extern NSApplicationActivationPolicy AvnDesiredActivationPolicy;

+ 17 - 0
native/Avalonia.Native/src/OSX/main.mm

@@ -2,6 +2,7 @@
 #define COM_GUIDS_MATERIALIZE
 #include "common.h"
 
+static bool s_generateDefaultAppMenuItems = true;
 static NSString* s_appTitle = @"Avalonia";
 
 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
@@ -122,6 +123,12 @@ public:
             ? NSApplicationActivationPolicyRegular : NSApplicationActivationPolicyAccessory;
         return S_OK;
     }
+    
+    virtual HRESULT SetDisableDefaultApplicationMenuItems (bool enabled) override
+    {
+        SetAutoGenerateDefaultAppMenuItems(!enabled);
+        return S_OK;
+    }
 };
 
 /// See "Using POSIX Threads in a Cocoa Application" section here:
@@ -310,3 +317,13 @@ CGFloat PrimaryDisplayHeight()
 {
   return NSMaxY([[[NSScreen screens] firstObject] frame]);
 }
+
+void SetAutoGenerateDefaultAppMenuItems (bool enabled)
+{
+    s_generateDefaultAppMenuItems = enabled;
+}
+
+bool GetAutoGenerateDefaultAppMenuItems ()
+{
+    return s_generateDefaultAppMenuItems;
+}

+ 44 - 41
native/Avalonia.Native/src/OSX/menu.mm

@@ -445,47 +445,50 @@ extern void SetAppMenu (NSString* appName, IAvnMenu* menu)
         
         auto appMenu  = [s_appMenuItem submenu];
         
-        [appMenu addItem:[NSMenuItem separatorItem]];
-        
-        // Services item and menu
-        auto servicesItem = [[NSMenuItem alloc] init];
-        servicesItem.title = @"Services";
-        NSMenu *servicesMenu = [[NSMenu alloc] initWithTitle:@"Services"];
-        servicesItem.submenu = servicesMenu;
-        [NSApplication sharedApplication].servicesMenu = servicesMenu;
-        [appMenu addItem:servicesItem];
-        
-        [appMenu addItem:[NSMenuItem separatorItem]];
-        
-        // Hide Application
-        auto hideItem = [[NSMenuItem alloc] initWithTitle:[@"Hide " stringByAppendingString:appName] action:@selector(hide:) keyEquivalent:@"h"];
-        
-        [appMenu addItem:hideItem];
-        
-        // Hide Others
-        auto hideAllOthersItem = [[NSMenuItem alloc] initWithTitle:@"Hide Others"
-                                                       action:@selector(hideOtherApplications:)
-                                                keyEquivalent:@"h"];
-        
-        hideAllOthersItem.keyEquivalentModifierMask = NSEventModifierFlagCommand | NSEventModifierFlagOption;
-        [appMenu addItem:hideAllOthersItem];
-        
-        // Show All
-        auto showAllItem = [[NSMenuItem alloc] initWithTitle:@"Show All"
-                                                 action:@selector(unhideAllApplications:)
-                                          keyEquivalent:@""];
-        
-        [appMenu addItem:showAllItem];
-        
-        [appMenu addItem:[NSMenuItem separatorItem]];
-        
-        // Quit Application
-        auto quitItem = [[NSMenuItem alloc] init];
-        quitItem.title = [@"Quit " stringByAppendingString:appName];
-        quitItem.keyEquivalent = @"q";
-        quitItem.target = [AvnWindow class];
-        quitItem.action = @selector(closeAll);
-        [appMenu addItem:quitItem];
+        if(GetAutoGenerateDefaultAppMenuItems())
+        {
+            [appMenu addItem:[NSMenuItem separatorItem]];
+            
+            // Services item and menu
+            auto servicesItem = [[NSMenuItem alloc] init];
+            servicesItem.title = @"Services";
+            NSMenu *servicesMenu = [[NSMenu alloc] initWithTitle:@"Services"];
+            servicesItem.submenu = servicesMenu;
+            [NSApplication sharedApplication].servicesMenu = servicesMenu;
+            [appMenu addItem:servicesItem];
+            
+            [appMenu addItem:[NSMenuItem separatorItem]];
+            
+            // Hide Application
+            auto hideItem = [[NSMenuItem alloc] initWithTitle:[@"Hide " stringByAppendingString:appName] action:@selector(hide:) keyEquivalent:@"h"];
+            
+            [appMenu addItem:hideItem];
+            
+            // Hide Others
+            auto hideAllOthersItem = [[NSMenuItem alloc] initWithTitle:@"Hide Others"
+                                                           action:@selector(hideOtherApplications:)
+                                                    keyEquivalent:@"h"];
+            
+            hideAllOthersItem.keyEquivalentModifierMask = NSEventModifierFlagCommand | NSEventModifierFlagOption;
+            [appMenu addItem:hideAllOthersItem];
+            
+            // Show All
+            auto showAllItem = [[NSMenuItem alloc] initWithTitle:@"Show All"
+                                                     action:@selector(unhideAllApplications:)
+                                              keyEquivalent:@""];
+            
+            [appMenu addItem:showAllItem];
+            
+            [appMenu addItem:[NSMenuItem separatorItem]];
+            
+            // Quit Application
+            auto quitItem = [[NSMenuItem alloc] init];
+            quitItem.title = [@"Quit " stringByAppendingString:appName];
+            quitItem.keyEquivalent = @"q";
+            quitItem.target = [AvnWindow class];
+            quitItem.action = @selector(closeAll);
+            [appMenu addItem:quitItem];
+        }
     }
     else
     {

+ 2 - 0
src/Avalonia.Controls.DataGrid/DataGridTemplateColumn.cs

@@ -8,6 +8,7 @@ using Avalonia.Controls.Utils;
 using Avalonia.Input;
 using Avalonia.Interactivity;
 using Avalonia.Media;
+using Avalonia.Metadata;
 using Avalonia.Utilities;
 
 namespace Avalonia.Controls
@@ -22,6 +23,7 @@ namespace Avalonia.Controls
                 o => o.CellTemplate,
                 (o, v) => o.CellTemplate = v);
 
+        [Content]
         public IDataTemplate CellTemplate
         {
             get { return _cellTemplate; }

+ 2 - 0
src/Avalonia.Native/AvaloniaNativePlatform.cs

@@ -92,6 +92,8 @@ namespace Avalonia.Native
                 var macOpts = AvaloniaLocator.Current.GetService<MacOSPlatformOptions>();
 
                 _factory.MacOptions.SetShowInDock(macOpts?.ShowInDock != false ? 1 : 0);
+                _factory.MacOptions.SetDisableDefaultApplicationMenuItems(
+                    macOpts?.DisableDefaultApplicationMenuItems == true ? 1 : 0);
             }
 
             AvaloniaLocator.CurrentMutable

+ 2 - 0
src/Avalonia.Native/AvaloniaNativePlatformExtensions.cs

@@ -38,5 +38,7 @@ namespace Avalonia
     public class MacOSPlatformOptions
     {
         public bool ShowInDock { get; set; } = true;
+        
+        public bool DisableDefaultApplicationMenuItems { get; set; }
     }
 }

+ 1 - 0
src/Avalonia.Native/avn.idl

@@ -528,6 +528,7 @@ interface IAvnMacOptions : IUnknown
 {
      HRESULT SetShowInDock(int show);
      HRESULT SetApplicationTitle(char* utf8string);
+     HRESULT SetDisableDefaultApplicationMenuItems(bool enabled);
 }
 
 [uuid(04c1b049-1f43-418a-9159-cae627ec1367)]