Remove Menu::AttachToWindow
It makes the logic more complex without any benefit
This commit is contained in:
parent
6d6e75795f
commit
47e9deeb9a
5 changed files with 35 additions and 10 deletions
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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_
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue