| Index: chrome/browser/chromeos/status/power_menu_button.cc
|
| diff --git a/chrome/browser/chromeos/status/power_menu_button.cc b/chrome/browser/chromeos/status/power_menu_button.cc
|
| index 22f971eb61ed9eb4f5df6ed7252db2fe5aa1d5c5..05578636ed0d1f53ac4fa58aa97b20b91021ce35 100644
|
| --- a/chrome/browser/chromeos/status/power_menu_button.cc
|
| +++ b/chrome/browser/chromeos/status/power_menu_button.cc
|
| @@ -6,6 +6,7 @@
|
|
|
| #include <algorithm>
|
|
|
| +#include "base/auto_reset.h"
|
| #include "base/string_number_conversions.h"
|
| #include "base/stringprintf.h"
|
| #include "base/time.h"
|
| @@ -19,6 +20,7 @@
|
| #include "ui/gfx/canvas_skia.h"
|
| #include "ui/gfx/font.h"
|
| #include "views/controls/menu/menu_item_view.h"
|
| +#include "views/controls/menu/menu_runner.h"
|
| #include "views/controls/menu/submenu_view.h"
|
| #include "views/widget/widget.h"
|
|
|
| @@ -220,8 +222,8 @@ class PowerMenuButton::StatusView : public View {
|
|
|
| void OnMouseReleased(const views::MouseEvent& event) {
|
| if (event.IsLeftMouseButton()) {
|
| - DCHECK(menu_button_->menu_);
|
| - menu_button_->menu_->Cancel();
|
| + DCHECK(menu_button_->menu_runner_);
|
| + menu_button_->menu_runner_->Cancel();
|
| }
|
| }
|
|
|
| @@ -243,7 +245,7 @@ PowerMenuButton::PowerMenuButton(StatusAreaHost* host)
|
| battery_time_to_full_(TimeDelta::FromMicroseconds(kInitialMS)),
|
| battery_time_to_empty_(TimeDelta::FromMicroseconds(kInitialMS)),
|
| status_(NULL),
|
| - menu_(NULL) {
|
| + menu_runner_(NULL) {
|
| UpdateIconAndLabelInfo();
|
| CrosLibrary::Get()->GetPowerLibrary()->AddObserver(this);
|
| }
|
| @@ -315,31 +317,31 @@ void PowerMenuButton::OnLocaleChanged() {
|
| // PowerMenuButton, views::ViewMenuDelegate implementation:
|
|
|
| void PowerMenuButton::RunMenu(views::View* source, const gfx::Point& pt) {
|
| - menu_ = new views::MenuItemView(this);
|
| - views::MenuItemView* submenu =
|
| - menu_->AppendMenuItem(
|
| + views::MenuItemView* menu = new views::MenuItemView(this);
|
| + // MenuRunner takes ownership of |menu|.
|
| + views::MenuRunner menu_runner(menu);
|
| + views::MenuItemView* submenu = menu->AppendMenuItem(
|
| POWER_BATTERY_PERCENTAGE_ITEM,
|
| std::wstring(),
|
| views::MenuItemView::NORMAL);
|
| status_ = new StatusView(this);
|
| submenu->AddChildView(status_);
|
| - menu_->CreateSubmenu()->set_resize_open_menu(true);
|
| - menu_->SetMargins(0, 0);
|
| + menu->CreateSubmenu()->set_resize_open_menu(true);
|
| + menu->SetMargins(0, 0);
|
| submenu->SetMargins(0, 0);
|
| - menu_->ChildrenChanged();
|
| + menu->ChildrenChanged();
|
|
|
| gfx::Point screen_location;
|
| views::View::ConvertPointToScreen(source, &screen_location);
|
| gfx::Rect bounds(screen_location, source->size());
|
| - menu_->RunMenuAt(
|
| - source->GetWidget()->GetTopLevelWidget(),
|
| - this,
|
| - bounds,
|
| - views::MenuItemView::TOPRIGHT,
|
| - true);
|
| - delete menu_;
|
| + AutoReset<views::MenuRunner*> menu_runner_reseter(&menu_runner_,
|
| + &menu_runner);
|
| + if (menu_runner.RunMenuAt(
|
| + source->GetWidget()->GetTopLevelWidget(), this, bounds,
|
| + views::MenuItemView::TOPRIGHT, views::MenuRunner::HAS_MNEMONICS) ==
|
| + views::MenuRunner::MENU_DELETED)
|
| + return;
|
| status_ = NULL;
|
| - menu_ = NULL;
|
| }
|
|
|
| ////////////////////////////////////////////////////////////////////////////////
|
|
|