Add Menu.setApplicationMenu API to set main menu of NSApp.

This commit is contained in:
Cheng Zhao 2013-05-16 10:54:37 +08:00
parent 64a8664ffe
commit 937b811c8d
5 changed files with 46 additions and 5 deletions

View file

@ -7,7 +7,6 @@
#include "base/message_loop.h"
#include "base/mac/scoped_sending_event.h"
#include "browser/native_window.h"
#import "chrome/browser/ui/cocoa/menu_controller.h"
#include "content/public/browser/web_contents.h"
#include "content/public/browser/web_contents_view.h"
@ -62,6 +61,28 @@ void MenuMac::Popup(NativeWindow* native_window) {
}
}
// static
v8::Handle<v8::Value> Menu::SetApplicationMenu(const v8::Arguments &args) {
v8::HandleScope scope;
if (!args[0]->IsObject())
return node::ThrowTypeError("Bad argument");
MenuMac* menu = ObjectWrap::Unwrap<MenuMac>(args[0]->ToObject());
if (!menu)
return node::ThrowError("Menu is destroyed");
scoped_nsobject<MenuController> menu_controller(
[[MenuController alloc] initWithModel:menu->model_.get()
useWithPopUpButtonCell:NO]);
[NSApp setMainMenu:[menu_controller menu]];
// Ensure the menu_controller_ is destroyed after main menu is set.
menu_controller.swap(menu->menu_controller_);
return v8::Undefined();
}
// static
Menu* Menu::Create(v8::Handle<v8::Object> wrapper) {
return new MenuMac(wrapper);