Browse Source

refactor: no longer require submenu for services menuitem (#15656)

Shelley Vohr 6 years ago
parent
commit
9fd98bb27b
3 changed files with 13 additions and 6 deletions
  1. 11 3
      atom/browser/ui/cocoa/atom_menu_controller.mm
  2. 1 2
      default_app/menu.js
  3. 1 1
      docs/api/menu.md

+ 11 - 3
atom/browser/ui/cocoa/atom_menu_controller.mm

@@ -208,7 +208,17 @@ static base::scoped_nsobject<NSMenu> recentDocumentsMenuSwap_;
 
   base::string16 role = model->GetRoleAt(index);
   atom::AtomMenuModel::ItemType type = model->GetTypeAt(index);
-  if (type == atom::AtomMenuModel::TYPE_SUBMENU) {
+
+  if (role == base::ASCIIToUTF16("services")) {
+    base::string16 title = base::ASCIIToUTF16("Services");
+    NSString* label = l10n_util::FixUpWindowsStyleLabel(title);
+
+    [item setTarget:nil];
+    [item setAction:nil];
+    NSMenu* submenu = [[NSMenu alloc] initWithTitle:label];
+    [item setSubmenu:submenu];
+    [NSApp setServicesMenu:submenu];
+  } else if (type == atom::AtomMenuModel::TYPE_SUBMENU) {
     // Recursively build a submenu from the sub-model at this index.
     [item setTarget:nil];
     [item setAction:nil];
@@ -223,8 +233,6 @@ static base::scoped_nsobject<NSMenu> recentDocumentsMenuSwap_;
       [NSApp setWindowsMenu:submenu];
     else if (role == base::ASCIIToUTF16("help"))
       [NSApp setHelpMenu:submenu];
-    else if (role == base::ASCIIToUTF16("services"))
-      [NSApp setServicesMenu:submenu];
     else if (role == base::ASCIIToUTF16("recentdocuments"))
       [self replaceSubmenuShowingRecentDocuments:item];
   } else {

+ 1 - 2
default_app/menu.js

@@ -123,8 +123,7 @@ const setDefaultApplicationMenu = () => {
           type: 'separator'
         },
         {
-          role: 'services',
-          submenu: []
+          role: 'services'
         },
         {
           type: 'separator'

+ 1 - 1
docs/api/menu.md

@@ -210,7 +210,7 @@ if (process.platform === 'darwin') {
     submenu: [
       { role: 'about' },
       { type: 'separator' },
-      { role: 'services', submenu: [] },
+      { role: 'services' },
       { type: 'separator' },
       { role: 'hide' },
       { role: 'hideothers' },