Skip to content

Commit

Permalink
fix: display empty menu item for non-visible submenus (backport: 5-0-…
Browse files Browse the repository at this point in the history
…x) (#16848)

* fix: display empty menu item for nonvisible submenus

* use Chromium UI string ID
  • Loading branch information
trop[bot] authored and codebytere committed Feb 8, 2019
1 parent 4079787 commit 91a67e4
Showing 1 changed file with 27 additions and 1 deletion.
28 changes: 27 additions & 1 deletion atom/browser/ui/cocoa/atom_menu_controller.mm
Expand Up @@ -17,6 +17,7 @@
#include "ui/base/l10n/l10n_util_mac.h"
#include "ui/events/cocoa/cocoa_event_utils.h"
#include "ui/gfx/image/image.h"
#include "ui/strings/grit/ui_strings.h"

using content::BrowserThread;

Expand Down Expand Up @@ -58,6 +59,29 @@
{@selector(clearRecentDocuments:), "clearrecentdocuments"},
};

// Called when adding a submenu to the menu and checks if the submenu, via its
// |model|, has visible child items.
bool MenuHasVisibleItems(const atom::AtomMenuModel* model) {
int count = model->GetItemCount();
for (int index = 0; index < count; index++) {
if (model->IsVisibleAt(index))
return true;
}
return false;
}

// Called when an empty submenu is created. This inserts a menu item labeled
// "(empty)" into the submenu. Matches Windows behavior.
NSMenu* MakeEmptySubmenu() {
base::scoped_nsobject<NSMenu> submenu([[NSMenu alloc] initWithTitle:@""]);
NSString* empty_menu_title =
l10n_util::GetNSString(IDS_APP_MENU_EMPTY_SUBMENU);

[submenu addItemWithTitle:empty_menu_title action:NULL keyEquivalent:@""];
[[submenu itemAtIndex:0] setEnabled:NO];
return submenu.autorelease();
}

} // namespace

// Menu item is located for ease of removing it from the parent owner
Expand Down Expand Up @@ -227,7 +251,9 @@ - (void)addItemToMenu:(NSMenu*)menu
[item setAction:nil];
atom::AtomMenuModel* submenuModel =
static_cast<atom::AtomMenuModel*>(model->GetSubmenuModelAt(index));
NSMenu* submenu = [self menuFromModel:submenuModel];
NSMenu* submenu = MenuHasVisibleItems(submenuModel)
? [self menuFromModel:submenuModel]
: MakeEmptySubmenu();
[submenu setTitle:[item title]];
[item setSubmenu:submenu];

Expand Down

0 comments on commit 91a67e4

Please sign in to comment.