Index: ui/views/controls/menu/menu_controller.cc |
diff --git a/ui/views/controls/menu/menu_controller.cc b/ui/views/controls/menu/menu_controller.cc |
index 86cd597fe313963898a5caea4661535a2e72ed4e..f6c2abdd14aac9a709c8059e3b525dc20edd9084 100644 |
--- a/ui/views/controls/menu/menu_controller.cc |
+++ b/ui/views/controls/menu/menu_controller.cc |
@@ -4,6 +4,10 @@ |
#include "ui/views/controls/menu/menu_controller.h" |
+#if defined(OS_WIN) |
+#include <windowsx.h> |
+#endif |
+ |
#include "base/i18n/case_conversion.h" |
#include "base/i18n/rtl.h" |
#include "base/run_loop.h" |
@@ -490,7 +494,8 @@ void MenuController::OnMouseReleased(SubmenuView* source, |
== views::MenuItemView::kEmptyMenuItemViewID) |
menu = part.parent; |
- if (menu != NULL && ShowContextMenu(menu, source, event)) |
+ if (menu != NULL && ShowContextMenu(menu, source, event, |
+ ui::MENU_SOURCE_MOUSE)) |
return; |
} |
@@ -554,7 +559,7 @@ void MenuController::OnGestureEvent(SubmenuView* source, |
event->StopPropagation(); |
} else if (event->type() == ui::ET_GESTURE_LONG_PRESS) { |
if (part.type == MenuPart::MENU_ITEM && part.menu) { |
- if (ShowContextMenu(part.menu, source, *event)) |
+ if (ShowContextMenu(part.menu, source, *event, ui::MENU_SOURCE_TOUCH)) |
event->StopPropagation(); |
} |
} else if (event->type() == ui::ET_GESTURE_TAP) { |
@@ -957,8 +962,11 @@ bool MenuController::Dispatch(const MSG& msg) { |
if (item && item->GetRootMenuItem() != item) { |
gfx::Point screen_loc(0, item->height()); |
View::ConvertPointToScreen(item, &screen_loc); |
+ ui::MenuSourceType source_type = ui::MENU_SOURCE_MOUSE; |
+ if (GET_X_LPARAM(msg.lParam) == -1 && GET_Y_LPARAM(msg.lParam) == -1) |
+ source_type = ui::MENU_SOURCE_KEYBOARD; |
item->GetDelegate()->ShowContextMenu(item, item->GetCommand(), |
- screen_loc, false); |
+ screen_loc, source_type); |
} |
return true; |
} |
@@ -1270,7 +1278,8 @@ bool MenuController::ShowSiblingMenu(SubmenuView* source, |
bool MenuController::ShowContextMenu(MenuItemView* menu_item, |
SubmenuView* source, |
- const ui::LocatedEvent& event) { |
+ const ui::LocatedEvent& event, |
+ ui::MenuSourceType source_type) { |
// Set the selection immediately, making sure the submenu is only open |
// if it already was. |
int selection_types = SELECTION_UPDATE_IMMEDIATELY; |
@@ -1281,7 +1290,7 @@ bool MenuController::ShowContextMenu(MenuItemView* menu_item, |
View::ConvertPointToScreen(source->GetScrollViewContainer(), &loc); |
if (menu_item->GetDelegate()->ShowContextMenu( |
- menu_item, menu_item->GetCommand(), loc, true)) { |
+ menu_item, menu_item->GetCommand(), loc, source_type)) { |
SendMouseCaptureLostToActiveView(); |
return true; |
} |