Remove JS override of setMenu

This commit is contained in:
Cheng Zhao 2015-06-24 19:51:11 +08:00
parent f198148c79
commit 9b9108f789
3 changed files with 17 additions and 14 deletions

View file

@ -409,8 +409,20 @@ void Window::SetOverlayIcon(const gfx::Image& overlay,
window_->SetOverlayIcon(overlay, description); window_->SetOverlayIcon(overlay, description);
} }
void Window::SetMenu(ui::SimpleMenuModel* menu) { void Window::SetMenu(v8::Isolate* isolate, v8::Local<v8::Value> value) {
window_->SetMenu(menu); mate::Handle<Menu> menu;
if (value->IsObject() &&
mate::V8ToString(value->ToObject()->GetConstructorName()) == "Menu" &&
mate::ConvertFromV8(isolate, value, &menu)) {
menu_.Reset(isolate, menu.ToV8());
window_->SetMenu(menu->model());
} else if (value->IsNull()) {
menu_.Reset();
window_->SetMenu(nullptr);
} else {
isolate->ThrowException(v8::Exception::TypeError(
mate::StringToV8(isolate, "Invalid Menu")));
}
} }
void Window::SetAutoHideMenuBar(bool auto_hide) { void Window::SetAutoHideMenuBar(bool auto_hide) {
@ -515,7 +527,7 @@ void Window::BuildPrototype(v8::Isolate* isolate,
.SetMethod("capturePage", &Window::CapturePage) .SetMethod("capturePage", &Window::CapturePage)
.SetMethod("setProgressBar", &Window::SetProgressBar) .SetMethod("setProgressBar", &Window::SetProgressBar)
.SetMethod("setOverlayIcon", &Window::SetOverlayIcon) .SetMethod("setOverlayIcon", &Window::SetOverlayIcon)
.SetMethod("_setMenu", &Window::SetMenu) .SetMethod("setMenu", &Window::SetMenu)
.SetMethod("setAutoHideMenuBar", &Window::SetAutoHideMenuBar) .SetMethod("setAutoHideMenuBar", &Window::SetAutoHideMenuBar)
.SetMethod("isMenuBarAutoHide", &Window::IsMenuBarAutoHide) .SetMethod("isMenuBarAutoHide", &Window::IsMenuBarAutoHide)
.SetMethod("setMenuBarVisibility", &Window::SetMenuBarVisibility) .SetMethod("setMenuBarVisibility", &Window::SetMenuBarVisibility)

View file

@ -25,10 +25,6 @@ class Arguments;
class Dictionary; class Dictionary;
} }
namespace ui {
class SimpleMenuModel;
}
namespace atom { namespace atom {
class NativeWindow; class NativeWindow;
@ -137,7 +133,7 @@ class Window : public mate::TrackableObject<Window>,
void SetProgressBar(double progress); void SetProgressBar(double progress);
void SetOverlayIcon(const gfx::Image& overlay, void SetOverlayIcon(const gfx::Image& overlay,
const std::string& description); const std::string& description);
void SetMenu(ui::SimpleMenuModel* menu); void SetMenu(v8::Isolate* isolate, v8::Local<v8::Value> menu);
void SetAutoHideMenuBar(bool auto_hide); void SetAutoHideMenuBar(bool auto_hide);
bool IsMenuBarAutoHide(); bool IsMenuBarAutoHide();
void SetMenuBarVisibility(bool visible); void SetMenuBarVisibility(bool visible);
@ -156,6 +152,7 @@ class Window : public mate::TrackableObject<Window>,
v8::Global<v8::Value> web_contents_; v8::Global<v8::Value> web_contents_;
v8::Global<v8::Value> devtools_web_contents_; v8::Global<v8::Value> devtools_web_contents_;
v8::Global<v8::Value> menu_;
scoped_ptr<NativeWindow> window_; scoped_ptr<NativeWindow> window_;

View file

@ -27,12 +27,6 @@ BrowserWindow::_init = ->
@on 'focus', (event) => @on 'focus', (event) =>
app.emit 'browser-window-focus', event, this app.emit 'browser-window-focus', event, this
BrowserWindow::setMenu = (menu) ->
throw new TypeError('Invalid menu') unless menu is null or menu?.constructor?.name is 'Menu'
@menu = menu # Keep a reference of menu in case of GC.
@_setMenu menu
BrowserWindow.getFocusedWindow = -> BrowserWindow.getFocusedWindow = ->
windows = BrowserWindow.getAllWindows() windows = BrowserWindow.getAllWindows()
return window for window in windows when window.isFocused() return window for window in windows when window.isFocused()