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

Unified Diff: views/controls/button/button_dropdown.cc

Issue 7044016: Replace ButtonDropDown menu implementation (Menu2) with MenuItemView. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: One last little style fix. Created 9 years, 7 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
« no previous file with comments | « views/controls/button/button_dropdown.h ('k') | views/controls/menu/menu_controller.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: views/controls/button/button_dropdown.cc
diff --git a/views/controls/button/button_dropdown.cc b/views/controls/button/button_dropdown.cc
index 7afdbd5231a7bb406603ba6e5f19d0a67944999e..bde921089de6cb729289b4b9ca1559858b7244a3 100644
--- a/views/controls/button/button_dropdown.cc
+++ b/views/controls/button/button_dropdown.cc
@@ -10,8 +10,11 @@
#include "grit/app_strings.h"
#include "ui/base/accessibility/accessible_view_state.h"
#include "ui/base/l10n/l10n_util.h"
-#include "views/controls/menu/view_menu_delegate.h"
+#include "ui/base/models/menu_model.h"
+#include "views/controls/menu/menu_item_view.h"
+#include "views/controls/menu/menu_model_adapter.h"
#include "views/widget/widget.h"
+#include "views/window/window.h"
namespace views {
@@ -118,41 +121,56 @@ bool ButtonDropDown::ShouldEnterPushedState(const MouseEvent& event) {
}
void ButtonDropDown::ShowDropDownMenu(gfx::NativeView window) {
- if (model_) {
- gfx::Rect lb = GetLocalBounds();
+ gfx::Rect lb = GetLocalBounds();
- // Both the menu position and the menu anchor type change if the UI layout
- // is right-to-left.
- gfx::Point menu_position(lb.origin());
- menu_position.Offset(0, lb.height() - 1);
- if (base::i18n::IsRTL())
- menu_position.Offset(lb.width() - 1, 0);
+ // Both the menu position and the menu anchor type change if the UI layout
+ // is right-to-left.
+ gfx::Point menu_position(lb.origin());
+ menu_position.Offset(0, lb.height() - 1);
+ if (base::i18n::IsRTL())
+ menu_position.Offset(lb.width() - 1, 0);
- View::ConvertPointToScreen(this, &menu_position);
+ View::ConvertPointToScreen(this, &menu_position);
#if defined(OS_WIN)
- int left_bound = GetSystemMetrics(SM_XVIRTUALSCREEN);
+ int left_bound = GetSystemMetrics(SM_XVIRTUALSCREEN);
#else
- int left_bound = 0;
- NOTIMPLEMENTED();
+ int left_bound = 0;
+ NOTIMPLEMENTED();
#endif
- if (menu_position.x() < left_bound)
- menu_position.set_x(left_bound);
-
- // Make the button look depressed while the menu is open.
- SetState(BS_PUSHED);
- menu_.reset(new Menu2(model_));
- menu_->RunMenuAt(menu_position, Menu2::ALIGN_TOPLEFT);
-
- // Need to explicitly clear mouse handler so that events get sent
- // properly after the menu finishes running. If we don't do this, then
- // the first click to other parts of the UI is eaten.
- SetMouseHandler(NULL);
-
- // Set the state back to normal after the drop down menu is closed.
- if (state_ != BS_DISABLED)
- SetState(BS_NORMAL);
+ if (menu_position.x() < left_bound)
+ menu_position.set_x(left_bound);
+
+ // Make the button look depressed while the menu is open.
+ SetState(BS_PUSHED);
+
+ // Create and run menu. Display an empty menu if model is NULL.
+ if (model_) {
+ MenuModelAdapter menu_delegate(model_);
+ MenuItemView menu(&menu_delegate);
+ menu_delegate.BuildMenu(&menu);
+
+ menu.RunMenuAt(GetWindow()->GetNativeWindow(), NULL,
+ gfx::Rect(menu_position, gfx::Size(0, 0)),
+ views::MenuItemView::TOPLEFT,
+ true);
+ } else {
+ MenuDelegate menu_delegate;
+ MenuItemView menu(&menu_delegate);
+ menu.RunMenuAt(GetWindow()->GetNativeWindow(), NULL,
+ gfx::Rect(menu_position, gfx::Size(0, 0)),
+ views::MenuItemView::TOPLEFT,
+ true);
}
+
+ // Need to explicitly clear mouse handler so that events get sent
+ // properly after the menu finishes running. If we don't do this, then
+ // the first click to other parts of the UI is eaten.
+ SetMouseHandler(NULL);
+
+ // Set the state back to normal after the drop down menu is closed.
+ if (state_ != BS_DISABLED)
+ SetState(BS_NORMAL);
}
////////////////////////////////////////////////////////////////////////////////
« no previous file with comments | « views/controls/button/button_dropdown.h ('k') | views/controls/menu/menu_controller.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698