| Index: chrome/browser/ui/views/tabs/browser_tab_strip_controller.cc
|
| diff --git a/chrome/browser/ui/views/tabs/browser_tab_strip_controller.cc b/chrome/browser/ui/views/tabs/browser_tab_strip_controller.cc
|
| index 7bca14723a9975450bd1707ca323aa5f8dec34ec..1a9ab98717bd9ac1a82ff74f47397a6b71428719 100644
|
| --- a/chrome/browser/ui/views/tabs/browser_tab_strip_controller.cc
|
| +++ b/chrome/browser/ui/views/tabs/browser_tab_strip_controller.cc
|
| @@ -24,6 +24,7 @@
|
| #include "content/common/notification_service.h"
|
| #include "views/controls/menu/menu_item_view.h"
|
| #include "views/controls/menu/menu_model_adapter.h"
|
| +#include "views/controls/menu/menu_runner.h"
|
| #include "views/widget/widget.h"
|
|
|
| static TabRendererData::NetworkState TabContentsNetworkState(
|
| @@ -40,19 +41,18 @@ class BrowserTabStripController::TabContextMenuContents
|
| public:
|
| TabContextMenuContents(BaseTab* tab,
|
| BrowserTabStripController* controller)
|
| - : ALLOW_THIS_IN_INITIALIZER_LIST(
|
| - model_(this,
|
| - controller->model_,
|
| - controller->tabstrip_->GetModelIndexOfBaseTab(tab))),
|
| - menu_model_adapter_(&model_),
|
| - menu_(&menu_model_adapter_),
|
| - tab_(tab),
|
| + : tab_(tab),
|
| controller_(controller),
|
| last_command_(TabStripModel::CommandFirst) {
|
| - menu_model_adapter_.BuildMenu(&menu_);
|
| + model_.reset(new TabMenuModel(
|
| + this, controller->model_,
|
| + controller->tabstrip_->GetModelIndexOfBaseTab(tab)));
|
| + menu_model_adapter_.reset(new views::MenuModelAdapter(model_.get()));
|
| + menu_runner_.reset(
|
| + new views::MenuRunner(menu_model_adapter_->CreateMenu()));
|
| }
|
| +
|
| virtual ~TabContextMenuContents() {
|
| - menu_.Cancel();
|
| if (controller_)
|
| controller_->tabstrip_->StopAllHighlighting();
|
| }
|
| @@ -62,9 +62,11 @@ class BrowserTabStripController::TabContextMenuContents
|
| }
|
|
|
| void RunMenuAt(const gfx::Point& point) {
|
| - menu_.RunMenuAt(tab_->GetWidget(), NULL, gfx::Rect(point, gfx::Size()),
|
| - views::MenuItemView::TOPLEFT, true);
|
| - // We could be gone now. Assume |this| is junk!
|
| + if (menu_runner_->RunMenuAt(
|
| + tab_->GetWidget(), NULL, gfx::Rect(point, gfx::Size()),
|
| + views::MenuItemView::TOPLEFT, views::MenuRunner::HAS_MNEMONICS) ==
|
| + views::MenuRunner::MENU_DELETED)
|
| + return;
|
| }
|
|
|
| // Overridden from ui::SimpleMenuModel::Delegate:
|
| @@ -109,9 +111,9 @@ class BrowserTabStripController::TabContextMenuContents
|
| }
|
|
|
| private:
|
| - TabMenuModel model_;
|
| - views::MenuModelAdapter menu_model_adapter_;
|
| - views::MenuItemView menu_;
|
| + scoped_ptr<TabMenuModel> model_;
|
| + scoped_ptr<views::MenuModelAdapter> menu_model_adapter_;
|
| + scoped_ptr<views::MenuRunner> menu_runner_;
|
|
|
| // The tab we're showing a menu for.
|
| BaseTab* tab_;
|
|
|