diff --git a/atom/browser/ui/cocoa/atom_menu_controller.h b/atom/browser/ui/cocoa/atom_menu_controller.h index cc03f151e4b4..da10e1b0ba66 100644 --- a/atom/browser/ui/cocoa/atom_menu_controller.h +++ b/atom/browser/ui/cocoa/atom_menu_controller.h @@ -39,6 +39,9 @@ class MenuModel; // to the contents of the model after calling this will not be noticed. - (id)initWithModel:(ui::MenuModel*)model; +// Populate current NSMenu with |model|. +- (void)populateWithModel:(ui::MenuModel*)model; + // Programmatically close the constructed menu. - (void)cancel; diff --git a/atom/browser/ui/cocoa/atom_menu_controller.mm b/atom/browser/ui/cocoa/atom_menu_controller.mm index 24f6a1f5d4af..5013f5a9ee8a 100644 --- a/atom/browser/ui/cocoa/atom_menu_controller.mm +++ b/atom/browser/ui/cocoa/atom_menu_controller.mm @@ -93,6 +93,22 @@ int EventFlagsFromNSEvent(NSEvent* event) { [super dealloc]; } +- (void)populateWithModel:(ui::MenuModel*)model { + if (!menu_) + return; + + model_ = model; + [menu_ removeAllItems]; + + const int count = model->GetItemCount(); + for (int index = 0; index < count; index++) { + if (model->GetTypeAt(index) == ui::MenuModel::TYPE_SEPARATOR) + [self addSeparatorToMenu:menu_ atIndex:index]; + else + [self addItemToMenu:menu_ atIndex:index fromModel:model]; + } +} + - (void)cancel { if (isMenuOpen_) { [menu_ cancelTracking];