Remove Menu::AttachToWindow

It makes the logic more complex without any benefit
This commit is contained in:
Cheng Zhao 2015-06-04 15:32:33 +08:00
parent 6d6e75795f
commit 47e9deeb9a
5 changed files with 35 additions and 10 deletions

View file

@ -70,10 +70,6 @@ void Menu::MenuWillShow(ui::SimpleMenuModel* source) {
menu_will_show_.Run(); menu_will_show_.Run();
} }
void Menu::AttachToWindow(Window* window) {
window->window()->SetMenu(model_.get());
}
void Menu::InsertItemAt( void Menu::InsertItemAt(
int index, int command_id, const base::string16& label) { int index, int command_id, const base::string16& label) {
model_->InsertItemAt(index, command_id, label); model_->InsertItemAt(index, command_id, label);
@ -168,7 +164,6 @@ void Menu::BuildPrototype(v8::Isolate* isolate,
.SetMethod("isItemCheckedAt", &Menu::IsItemCheckedAt) .SetMethod("isItemCheckedAt", &Menu::IsItemCheckedAt)
.SetMethod("isEnabledAt", &Menu::IsEnabledAt) .SetMethod("isEnabledAt", &Menu::IsEnabledAt)
.SetMethod("isVisibleAt", &Menu::IsVisibleAt) .SetMethod("isVisibleAt", &Menu::IsVisibleAt)
.SetMethod("attachToWindow", &Menu::AttachToWindow)
.SetMethod("_popup", &Menu::Popup) .SetMethod("_popup", &Menu::Popup)
.SetMethod("_popupAt", &Menu::PopupAt); .SetMethod("_popupAt", &Menu::PopupAt);
} }

View file

@ -51,7 +51,6 @@ class Menu : public mate::Wrappable,
void ExecuteCommand(int command_id, int event_flags) override; void ExecuteCommand(int command_id, int event_flags) override;
void MenuWillShow(ui::SimpleMenuModel* source) override; void MenuWillShow(ui::SimpleMenuModel* source) override;
virtual void AttachToWindow(Window* window);
virtual void Popup(Window* window) = 0; virtual void Popup(Window* window) = 0;
virtual void PopupAt(Window* window, int x, int y) = 0; virtual void PopupAt(Window* window, int x, int y) = 0;
@ -99,4 +98,27 @@ class Menu : public mate::Wrappable,
} // namespace atom } // namespace atom
namespace mate {
template<>
struct Converter<ui::SimpleMenuModel*> {
static bool FromV8(v8::Isolate* isolate, v8::Local<v8::Value> val,
ui::SimpleMenuModel** out) {
// null would be tranfered to NULL.
if (val->IsNull()) {
*out = nullptr;
return true;
}
atom::api::Menu* menu;
if (!Converter<atom::api::Menu*>::FromV8(isolate, val, &menu))
return false;
*out = menu->model();
return true;
}
};
} // namespace mate
#endif // ATOM_BROWSER_API_ATOM_API_MENU_H_ #endif // ATOM_BROWSER_API_ATOM_API_MENU_H_

View file

@ -4,6 +4,7 @@
#include "atom/browser/api/atom_api_window.h" #include "atom/browser/api/atom_api_window.h"
#include "atom/browser/api/atom_api_menu.h"
#include "atom/browser/api/atom_api_web_contents.h" #include "atom/browser/api/atom_api_web_contents.h"
#include "atom/browser/browser.h" #include "atom/browser/browser.h"
#include "atom/browser/native_window.h" #include "atom/browser/native_window.h"
@ -437,6 +438,10 @@ void Window::SetOverlayIcon(const gfx::Image& overlay,
window_->SetOverlayIcon(overlay, description); window_->SetOverlayIcon(overlay, description);
} }
void Window::SetMenu(ui::SimpleMenuModel* menu) {
window_->SetMenu(menu);
}
void Window::SetAutoHideMenuBar(bool auto_hide) { void Window::SetAutoHideMenuBar(bool auto_hide) {
window_->SetAutoHideMenuBar(auto_hide); window_->SetAutoHideMenuBar(auto_hide);
} }
@ -535,6 +540,7 @@ void Window::BuildPrototype(v8::Isolate* isolate,
.SetMethod("print", &Window::Print) .SetMethod("print", &Window::Print)
.SetMethod("setProgressBar", &Window::SetProgressBar) .SetMethod("setProgressBar", &Window::SetProgressBar)
.SetMethod("setOverlayIcon", &Window::SetOverlayIcon) .SetMethod("setOverlayIcon", &Window::SetOverlayIcon)
.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,6 +25,10 @@ class Arguments;
class Dictionary; class Dictionary;
} }
namespace ui {
class SimpleMenuModel;
}
namespace atom { namespace atom {
class NativeWindow; class NativeWindow;
@ -134,6 +138,7 @@ class Window : public mate::EventEmitter,
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 SetAutoHideMenuBar(bool auto_hide); void SetAutoHideMenuBar(bool auto_hide);
bool IsMenuBarAutoHide(); bool IsMenuBarAutoHide();
void SetMenuBarVisibility(bool visible); void SetMenuBarVisibility(bool visible);

View file

@ -70,13 +70,10 @@ BrowserWindow::getDevToolsWebContents = ->
wrapWebContents @_getDevToolsWebContents() wrapWebContents @_getDevToolsWebContents()
BrowserWindow::setMenu = (menu) -> BrowserWindow::setMenu = (menu) ->
if process.platform is 'darwin'
throw new Error('BrowserWindow.setMenu is not available on OS X')
throw new TypeError('Invalid menu') unless menu is null or menu?.constructor?.name is '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. @menu = menu # Keep a reference of menu in case of GC.
@menu.attachToWindow this @_setMenu menu
BrowserWindow.getAllWindows = -> BrowserWindow.getAllWindows = ->
windows = BrowserWindow.windows windows = BrowserWindow.windows