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 d5b5a84e8f1b707fee0e9cf27f48c8fd0dc5d789..3f59112e743250fca4ffda6a3c1bd89243b30788 100644 |
--- a/ui/views/controls/menu/menu_controller.cc |
+++ b/ui/views/controls/menu/menu_controller.cc |
@@ -294,6 +294,7 @@ MenuItemView* MenuController::Run(Widget* parent, |
exit_type_ = EXIT_NONE; |
possible_drag_ = false; |
drag_in_progress_ = false; |
+ did_initiate_drag_ = false; |
closing_event_time_ = base::TimeDelta(); |
menu_start_time_ = base::TimeTicks::Now(); |
menu_start_mouse_press_loc_ = gfx::Point(); |
@@ -782,6 +783,20 @@ void MenuController::OnDragExitedScrollButton(SubmenuView* source) { |
StopScrolling(); |
} |
+void MenuController::OnDragWillStart() { |
+ DCHECK(!drag_in_progress_); |
+ drag_in_progress_ = true; |
+} |
+ |
+void MenuController::OnDragComplete(bool should_close) { |
+ DCHECK(drag_in_progress_); |
+ drag_in_progress_ = false; |
+ if (showing_ && should_close && GetActiveInstance() == this) { |
+ CloseAllNestedMenus(); |
+ Cancel(EXIT_ALL); |
+ } |
+} |
+ |
void MenuController::UpdateSubmenuSelection(SubmenuView* submenu) { |
if (submenu->IsShowing()) { |
gfx::Point point = GetScreen()->GetCursorScreenPoint(); |
@@ -970,19 +985,11 @@ void MenuController::StartDrag(SubmenuView* source, |
&data); |
StopScrolling(); |
int drag_ops = item->GetDelegate()->GetDragOperations(item); |
- drag_in_progress_ = true; |
+ did_initiate_drag_ = true; |
// TODO(varunjain): Properly determine and send DRAG_EVENT_SOURCE below. |
item->GetWidget()->RunShellDrag(NULL, data, widget_loc, drag_ops, |
ui::DragDropTypes::DRAG_EVENT_SOURCE_MOUSE); |
- drag_in_progress_ = false; |
- |
- if (GetActiveInstance() == this) { |
- if (showing_) { |
- // We're still showing, close all menus. |
- CloseAllNestedMenus(); |
- Cancel(EXIT_ALL); |
- } // else case, drop was on us. |
- } // else case, someone canceled us, don't do anything |
+ did_initiate_drag_ = false; |
} |
bool MenuController::OnKeyDown(ui::KeyboardCode key_code) { |
@@ -1071,6 +1078,7 @@ MenuController::MenuController(ui::NativeTheme* theme, |
owner_(NULL), |
possible_drag_(false), |
drag_in_progress_(false), |
+ did_initiate_drag_(false), |
valid_drop_coordinates_(false), |
last_drop_operation_(MenuDelegate::DROP_UNKNOWN), |
showing_submenu_(false), |