Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(13)

Unified Diff: chrome/browser/chromeos/status/power_menu_button.cc

Issue 7720012: Moves ownership of MenuItemView to MenuRunner as well as responbility (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix unit test Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;
}
////////////////////////////////////////////////////////////////////////////////

Powered by Google App Engine
This is Rietveld 408576698