diff options
Diffstat (limited to 'chrome/views')
-rw-r--r-- | chrome/views/chrome_menu.cc | 11 | ||||
-rw-r--r-- | chrome/views/chrome_menu.h | 8 | ||||
-rw-r--r-- | chrome/views/menu.cc | 2 |
3 files changed, 14 insertions, 7 deletions
diff --git a/chrome/views/chrome_menu.cc b/chrome/views/chrome_menu.cc index 360f6c1..33452cd 100644 --- a/chrome/views/chrome_menu.cc +++ b/chrome/views/chrome_menu.cc @@ -1785,9 +1785,14 @@ void MenuController::OnMouseReleased(SubmenuView* source, SetSelection(pending_state_.item, open_submenu, true); CPoint loc(event.GetX(), event.GetY()); View::ConvertPointToScreen(source->GetScrollViewContainer(), &loc); - part.menu->GetDelegate()->ShowContextMenu( - part.menu, part.menu->GetCommand(), loc.x, loc.y, true); - } else if (!part.is_scroll() && part.menu && !part.menu->HasSubmenu()) { + + // If we open a context menu just return now + if (part.menu->GetDelegate()->ShowContextMenu( + part.menu, part.menu->GetCommand(), loc.x, loc.y, true)) + return; + } + + if (!part.is_scroll() && part.menu && !part.menu->HasSubmenu()) { if (part.menu->GetDelegate()->IsTriggerableEvent(event)) { Accept(part.menu, event.GetFlags()); return; diff --git a/chrome/views/chrome_menu.h b/chrome/views/chrome_menu.h index a017b3d..05cce11 100644 --- a/chrome/views/chrome_menu.h +++ b/chrome/views/chrome_menu.h @@ -72,11 +72,13 @@ class MenuDelegate : Controller { // If this is not the result of a mouse gesture x/y is the recommended // location to display the content menu at. In either case, x/y is in // screen coordinates. - virtual void ShowContextMenu(MenuItemView* source, + // Returns true if a context menu was displayed, otherwise false + virtual bool ShowContextMenu(MenuItemView* source, int id, int x, int y, bool is_mouse_gesture) { + return false; } // Controller @@ -101,9 +103,9 @@ class MenuDelegate : Controller { } // Returns true if the specified mouse event is one the user can use - // to trigger, or accept, the mouse. Defaults to only left mouse buttons. + // to trigger, or accept, the mouse. Defaults to left or right mouse buttons. virtual bool IsTriggerableEvent(const MouseEvent& e) { - return e.IsLeftMouseButton(); + return e.IsLeftMouseButton() || e.IsRightMouseButton(); } // Invoked to determine if drops can be accepted for a submenu. This is diff --git a/chrome/views/menu.cc b/chrome/views/menu.cc index 89e7593..93185d6a 100644 --- a/chrome/views/menu.cc +++ b/chrome/views/menu.cc @@ -546,7 +546,7 @@ void Menu::RunMenuAt(int x, int y) { // Show the menu. Blocks until the menu is dismissed or an item is chosen. UINT flags = - GetTPMAlignFlags() | TPM_LEFTBUTTON | TPM_RETURNCMD | TPM_RECURSE; + GetTPMAlignFlags() | TPM_RIGHTBUTTON | TPM_RETURNCMD | TPM_RECURSE; is_menu_visible_ = true; DCHECK(owner_); // In order for context menus on menus to work, the context menu needs to |