summaryrefslogtreecommitdiffstats
path: root/views
diff options
context:
space:
mode:
authorphilippe.beaudoin@gmail.com <philippe.beaudoin@gmail.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-12 16:02:49 +0000
committerphilippe.beaudoin@gmail.com <philippe.beaudoin@gmail.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-12 16:02:49 +0000
commit07fd14552000d6431e6d76d2aecd08cf4e21d1b4 (patch)
treef523280381a0c507a99f9bcb0361e7f249251074 /views
parentbbb4bdaf78e09f48b5ad1c1920cf7381c73875a0 (diff)
downloadchromium_src-07fd14552000d6431e6d76d2aecd08cf4e21d1b4.zip
chromium_src-07fd14552000d6431e6d76d2aecd08cf4e21d1b4.tar.gz
chromium_src-07fd14552000d6431e6d76d2aecd08cf4e21d1b4.tar.bz2
Ensure the back/forward menus support middle click.
Clicking on an item of the back/forward menu with the middle mouse button should open the link in a new tab. BUG=88659 TEST=Navigate to google.com, middle-click and hold on the back arrow, drag down, select New Tab. Review URL: http://codereview.chromium.org/7338004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@92174 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'views')
-rw-r--r--views/controls/button/button_dropdown.cc1
-rw-r--r--views/controls/menu/menu_model_adapter.cc11
-rw-r--r--views/controls/menu/menu_model_adapter.h10
3 files changed, 20 insertions, 2 deletions
diff --git a/views/controls/button/button_dropdown.cc b/views/controls/button/button_dropdown.cc
index c942aab..01f13ca 100644
--- a/views/controls/button/button_dropdown.cc
+++ b/views/controls/button/button_dropdown.cc
@@ -154,6 +154,7 @@ void ButtonDropDown::ShowDropDownMenu(gfx::NativeView window) {
// Create and run menu. Display an empty menu if model is NULL.
if (model_) {
MenuModelAdapter menu_delegate(model_);
+ menu_delegate.set_triggerable_event_flags(triggerable_event_flags());
MenuItemView menu(&menu_delegate);
menu_delegate.BuildMenu(&menu);
diff --git a/views/controls/menu/menu_model_adapter.cc b/views/controls/menu/menu_model_adapter.cc
index 9da389d..90a99db 100644
--- a/views/controls/menu/menu_model_adapter.cc
+++ b/views/controls/menu/menu_model_adapter.cc
@@ -13,7 +13,9 @@
namespace views {
MenuModelAdapter::MenuModelAdapter(ui::MenuModel* menu_model)
- : menu_model_(menu_model) {
+ : menu_model_(menu_model),
+ triggerable_event_flags_(ui::EF_LEFT_BUTTON_DOWN |
+ ui::EF_RIGHT_BUTTON_DOWN) {
DCHECK(menu_model);
}
@@ -65,6 +67,11 @@ void MenuModelAdapter::ExecuteCommand(int id, int mouse_event_flags) {
NOTREACHED();
}
+bool MenuModelAdapter::IsTriggerableEvent(MenuItemView* source,
+ const MouseEvent& e) {
+ return (triggerable_event_flags_ & e.flags()) != 0;
+}
+
bool MenuModelAdapter::GetAccelerator(int id,
views::Accelerator* accelerator) {
ui::MenuModel* model = menu_model_;
@@ -183,4 +190,4 @@ void MenuModelAdapter::BuildMenuImpl(MenuItemView* menu, ui::MenuModel* model) {
menu->set_has_icons(model->HasIcons());
}
-} // views
+} // namespace views
diff --git a/views/controls/menu/menu_model_adapter.h b/views/controls/menu/menu_model_adapter.h
index 5ca54e6..2fbbf4b 100644
--- a/views/controls/menu/menu_model_adapter.h
+++ b/views/controls/menu/menu_model_adapter.h
@@ -31,10 +31,17 @@ class MenuModelAdapter : public MenuDelegate {
// (including submenus).
virtual void BuildMenu(MenuItemView* menu);
+ void set_triggerable_event_flags(int triggerable_event_flags) {
+ triggerable_event_flags_ = triggerable_event_flags;
+ }
+ int triggerable_event_flags() const { return triggerable_event_flags_; }
+
protected:
// views::MenuDelegate implementation.
virtual void ExecuteCommand(int id) OVERRIDE;
virtual void ExecuteCommand(int id, int mouse_event_flags) OVERRIDE;
+ virtual bool IsTriggerableEvent(MenuItemView* source,
+ const MouseEvent& e) OVERRIDE;
virtual bool GetAccelerator(int id,
views::Accelerator* accelerator) OVERRIDE;
virtual std::wstring GetLabel(int id) const OVERRIDE;
@@ -56,6 +63,9 @@ class MenuModelAdapter : public MenuDelegate {
// passed to the constructor.
ui::MenuModel* menu_model_;
+ // Mouse event flags which can trigger menu actions.
+ int triggerable_event_flags_;
+
// Map MenuItems to MenuModels. Used to implement WillShowMenu().
std::map<MenuItemView*, ui::MenuModel*> menu_map_;