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_; |