OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ui/views/controls/menu/menu_controller.h" | 5 #include "ui/views/controls/menu/menu_controller.h" |
6 | 6 |
7 #include "base/i18n/case_conversion.h" | 7 #include "base/i18n/case_conversion.h" |
8 #include "base/i18n/rtl.h" | 8 #include "base/i18n/rtl.h" |
9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
10 #include "base/time/time.h" | 10 #include "base/time/time.h" |
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
283 MenuController* MenuController::GetActiveInstance() { | 283 MenuController* MenuController::GetActiveInstance() { |
284 return active_instance_; | 284 return active_instance_; |
285 } | 285 } |
286 | 286 |
287 MenuItemView* MenuController::Run(Widget* parent, | 287 MenuItemView* MenuController::Run(Widget* parent, |
288 MenuButton* button, | 288 MenuButton* button, |
289 MenuItemView* root, | 289 MenuItemView* root, |
290 const gfx::Rect& bounds, | 290 const gfx::Rect& bounds, |
291 MenuAnchorPosition position, | 291 MenuAnchorPosition position, |
292 bool context_menu, | 292 bool context_menu, |
| 293 bool is_nested_drag, |
293 int* result_event_flags) { | 294 int* result_event_flags) { |
294 exit_type_ = EXIT_NONE; | 295 exit_type_ = EXIT_NONE; |
295 possible_drag_ = false; | 296 possible_drag_ = false; |
296 drag_in_progress_ = false; | 297 drag_in_progress_ = false; |
297 did_initiate_drag_ = false; | 298 did_initiate_drag_ = false; |
298 closing_event_time_ = base::TimeDelta(); | 299 closing_event_time_ = base::TimeDelta(); |
299 menu_start_time_ = base::TimeTicks::Now(); | 300 menu_start_time_ = base::TimeTicks::Now(); |
300 menu_start_mouse_press_loc_ = gfx::Point(); | 301 menu_start_mouse_press_loc_ = gfx::Point(); |
301 | 302 |
302 // If we are shown on mouse press, we will eat the subsequent mouse down and | 303 // If we are shown on mouse press, we will eat the subsequent mouse down and |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
341 if (owner_) | 342 if (owner_) |
342 owner_->RemoveObserver(this); | 343 owner_->RemoveObserver(this); |
343 owner_ = parent; | 344 owner_ = parent; |
344 if (owner_) | 345 if (owner_) |
345 owner_->AddObserver(this); | 346 owner_->AddObserver(this); |
346 | 347 |
347 // Set the selection, which opens the initial menu. | 348 // Set the selection, which opens the initial menu. |
348 SetSelection(root, SELECTION_OPEN_SUBMENU | SELECTION_UPDATE_IMMEDIATELY); | 349 SetSelection(root, SELECTION_OPEN_SUBMENU | SELECTION_UPDATE_IMMEDIATELY); |
349 | 350 |
350 if (!blocking_run_) { | 351 if (!blocking_run_) { |
351 // Start the timer to hide the menu. This is needed as we get no | 352 if (!is_nested_drag) { |
352 // notification when the drag has finished. | 353 // Start the timer to hide the menu. This is needed as we get no |
353 StartCancelAllTimer(); | 354 // notification when the drag has finished. |
| 355 StartCancelAllTimer(); |
| 356 } |
354 return NULL; | 357 return NULL; |
355 } | 358 } |
356 | 359 |
357 if (button) | 360 if (button) |
358 menu_button_ = button; | 361 menu_button_ = button; |
359 | 362 |
360 // Make sure Chrome doesn't attempt to shut down while the menu is showing. | 363 // Make sure Chrome doesn't attempt to shut down while the menu is showing. |
361 if (ViewsDelegate::views_delegate) | 364 if (ViewsDelegate::views_delegate) |
362 ViewsDelegate::views_delegate->AddRef(); | 365 ViewsDelegate::views_delegate->AddRef(); |
363 | 366 |
(...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
808 } | 811 } |
809 } | 812 } |
810 | 813 |
811 void MenuController::OnWidgetDestroying(Widget* widget) { | 814 void MenuController::OnWidgetDestroying(Widget* widget) { |
812 DCHECK_EQ(owner_, widget); | 815 DCHECK_EQ(owner_, widget); |
813 owner_->RemoveObserver(this); | 816 owner_->RemoveObserver(this); |
814 owner_ = NULL; | 817 owner_ = NULL; |
815 message_loop_->ClearOwner(); | 818 message_loop_->ClearOwner(); |
816 } | 819 } |
817 | 820 |
| 821 bool MenuController::IsCancelAllTimerRunningForTest() { |
| 822 return cancel_all_timer_.IsRunning(); |
| 823 } |
| 824 |
818 // static | 825 // static |
819 void MenuController::TurnOffMenuSelectionHoldForTest() { | 826 void MenuController::TurnOffMenuSelectionHoldForTest() { |
820 menu_selection_hold_time_ms = -1; | 827 menu_selection_hold_time_ms = -1; |
821 } | 828 } |
822 | 829 |
823 void MenuController::SetSelection(MenuItemView* menu_item, | 830 void MenuController::SetSelection(MenuItemView* menu_item, |
824 int selection_types) { | 831 int selection_types) { |
825 size_t paths_differ_at = 0; | 832 size_t paths_differ_at = 0; |
826 std::vector<MenuItemView*> current_path; | 833 std::vector<MenuItemView*> current_path; |
827 std::vector<MenuItemView*> new_path; | 834 std::vector<MenuItemView*> new_path; |
(...skipping 1471 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2299 } | 2306 } |
2300 } | 2307 } |
2301 | 2308 |
2302 gfx::Screen* MenuController::GetScreen() { | 2309 gfx::Screen* MenuController::GetScreen() { |
2303 Widget* root = owner_ ? owner_->GetTopLevelWidget() : NULL; | 2310 Widget* root = owner_ ? owner_->GetTopLevelWidget() : NULL; |
2304 return root ? gfx::Screen::GetScreenFor(root->GetNativeView()) | 2311 return root ? gfx::Screen::GetScreenFor(root->GetNativeView()) |
2305 : gfx::Screen::GetNativeScreen(); | 2312 : gfx::Screen::GetNativeScreen(); |
2306 } | 2313 } |
2307 | 2314 |
2308 } // namespace views | 2315 } // namespace views |
OLD | NEW |