Browse Source

fix: recentDocuments menu role on macOS (#20410)

trop[bot] 5 years ago
parent
commit
23a52c02a3
1 changed files with 20 additions and 6 deletions
  1. 20 6
      shell/browser/ui/cocoa/atom_menu_controller.mm

+ 20 - 6
shell/browser/ui/cocoa/atom_menu_controller.mm

@@ -126,11 +126,13 @@ static base::scoped_nsobject<NSMenu> recentDocumentsMenuSwap_;
   if (!menu_)
     return;
 
+  // Locate & retain the recent documents menu item
   if (!recentDocumentsMenuItem_) {
-    // Locate & retain the recent documents menu item
-    recentDocumentsMenuItem_.reset(
-        [[[[[NSApp mainMenu] itemWithTitle:@"Electron"] submenu]
-            itemWithTitle:@"Open Recent"] retain]);
+    base::string16 title = base::ASCIIToUTF16("Open Recent");
+    NSString* openTitle = l10n_util::FixUpWindowsStyleLabel(title);
+
+    recentDocumentsMenuItem_.reset([[[[[NSApp mainMenu]
+        itemWithTitle:@"Electron"] submenu] itemWithTitle:openTitle] retain]);
   }
 
   model_ = model;
@@ -193,8 +195,17 @@ static base::scoped_nsobject<NSMenu> recentDocumentsMenuSwap_;
 // Replaces the item's submenu instance with the singleton recent documents
 // menu. Previously replaced menu items will be recovered.
 - (void)replaceSubmenuShowingRecentDocuments:(NSMenuItem*)item {
-  NSMenu* recentDocumentsMenu =
-      [[[recentDocumentsMenuItem_ submenu] retain] autorelease];
+  NSMenu* recentDocumentsMenu = [recentDocumentsMenuItem_ submenu];
+  if (!recentDocumentsMenu) {
+    base::string16 title = base::ASCIIToUTF16("Clear Menu");
+    NSString* clearTitle = l10n_util::FixUpWindowsStyleLabel(title);
+    recentDocumentsMenu = [[[NSMenu alloc] initWithTitle:@""] autorelease];
+    [recentDocumentsMenu
+        addItem:[[[NSMenuItem alloc]
+                    initWithTitle:clearTitle
+                           action:@selector(clearRecentDocuments:)
+                    keyEquivalent:@""] autorelease]];
+  }
 
   // Remove menu items in recent documents back to swap menu
   [self moveMenuItems:recentDocumentsMenu to:recentDocumentsMenuSwap_];
@@ -211,6 +222,9 @@ static base::scoped_nsobject<NSMenu> recentDocumentsMenuSwap_;
   // Replace submenu
   [item setSubmenu:recentDocumentsMenu];
 
+  DCHECK_EQ([item action], @selector(submenuAction:));
+  DCHECK_EQ([item target], recentDocumentsMenu);
+
   // Remember the new menu item that carries the recent documents menu
   recentDocumentsMenuItem_.reset([item retain]);
 }