11#include " content/nw/src/browser/menubar_controller.h"
22
3+ #include " base/stl_util.h"
34#include " content/nw/src/browser/menubar_view.h"
5+ #include " ui/views/controls/button/menu_button.h"
46#include " ui/views/controls/menu/menu_item_view.h"
7+ #include " ui/views/widget/widget.h"
58
69namespace nw {
710
811MenuBarController::ModelToMenuMap MenuBarController::model_to_menu_map_;
12+ MenuBarController* MenuBarController::master_;
913
10- MenuBarController::MenuBarController (MenuBarView* menubar, ui::MenuModel* menu_model)
14+ MenuBarController::MenuBarController (MenuBarView* menubar, ui::MenuModel* menu_model, MenuBarController* master )
1115 :MenuModelAdapter(menu_model), menubar_(menubar) {
16+
17+ views::MenuItemView* menu = MenuBarController::CreateMenu (menubar, menu_model, this );
18+ if (!master) {
19+ master_ = this ;
20+ menu_runner_.reset (new views::MenuRunner (menu, views::MenuRunner::HAS_MNEMONICS));
21+ }
1222}
1323
1424MenuBarController::~MenuBarController () {
25+ if (master_ == this ) {
26+ STLDeleteElements (&controllers_);
27+ model_to_menu_map_.clear ();
28+ }
1529}
1630
1731views::MenuItemView* MenuBarController::GetSiblingMenu (
@@ -30,19 +44,33 @@ views::MenuItemView* MenuBarController::GetSiblingMenu(
3044
3145 *has_mnemonics = false ;
3246 *anchor = views::MENU_ANCHOR_TOPLEFT;
33- if (!model_to_menu_map_[model])
34- CreateMenu (menubar_, model);
47+ if (!model_to_menu_map_[model]) {
48+ MenuBarController* controller = new MenuBarController (menubar_, model, master_);
49+ CreateMenu (menubar_, model, controller);
50+ controllers_.push_back (controller);
51+ }
3552
3653 return model_to_menu_map_[model];
3754}
3855
39- views::MenuItemView* MenuBarController::CreateMenu (MenuBarView* menubar, ui::MenuModel* model) {
40- MenuBarController* controller = new MenuBarController (menubar, model);
56+ views::MenuItemView* MenuBarController::CreateMenu (MenuBarView* menubar,
57+ ui::MenuModel* model,
58+ MenuBarController* controller) {
4159 views::MenuItemView* menu = new views::MenuItemView (controller);
4260 controller->BuildMenu (menu);
4361 model_to_menu_map_[model] = menu;
4462
4563 return menu;
4664}
4765
66+ void MenuBarController::RunMenuAt (views::View* view, const gfx::Point& point) {
67+
68+ ignore_result (menu_runner_->RunMenuAt (view->GetWidget ()->GetTopLevelWidget (),
69+ static_cast <views::MenuButton*>(view),
70+ gfx::Rect (point, gfx::Size ()),
71+ views::MENU_ANCHOR_TOPRIGHT,
72+ ui::MENU_SOURCE_NONE));
73+ delete this ;
74+ }
75+
4876} // namespace nw
0 commit comments