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, | |
294 int* result_event_flags) { | 293 int* result_event_flags) { |
295 exit_type_ = EXIT_NONE; | 294 exit_type_ = EXIT_NONE; |
296 possible_drag_ = false; | 295 possible_drag_ = false; |
297 drag_in_progress_ = false; | 296 drag_in_progress_ = false; |
298 did_initiate_drag_ = false; | 297 did_initiate_drag_ = false; |
299 closing_event_time_ = base::TimeDelta(); | 298 closing_event_time_ = base::TimeDelta(); |
300 menu_start_time_ = base::TimeTicks::Now(); | 299 menu_start_time_ = base::TimeTicks::Now(); |
301 menu_start_mouse_press_loc_ = gfx::Point(); | 300 menu_start_mouse_press_loc_ = gfx::Point(); |
302 | 301 |
303 // If we are shown on mouse press, we will eat the subsequent mouse down and | 302 // 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... |
342 if (owner_) | 341 if (owner_) |
343 owner_->RemoveObserver(this); | 342 owner_->RemoveObserver(this); |
344 owner_ = parent; | 343 owner_ = parent; |
345 if (owner_) | 344 if (owner_) |
346 owner_->AddObserver(this); | 345 owner_->AddObserver(this); |
347 | 346 |
348 // Set the selection, which opens the initial menu. | 347 // Set the selection, which opens the initial menu. |
349 SetSelection(root, SELECTION_OPEN_SUBMENU | SELECTION_UPDATE_IMMEDIATELY); | 348 SetSelection(root, SELECTION_OPEN_SUBMENU | SELECTION_UPDATE_IMMEDIATELY); |
350 | 349 |
351 if (!blocking_run_) { | 350 if (!blocking_run_) { |
352 if (!is_nested_drag) { | 351 // Start the timer to hide the menu. This is needed as we get no |
353 // Start the timer to hide the menu. This is needed as we get no | 352 // notification when the drag has finished. |
354 // notification when the drag has finished. | 353 StartCancelAllTimer(); |
355 StartCancelAllTimer(); | |
356 } | |
357 return NULL; | 354 return NULL; |
358 } | 355 } |
359 | 356 |
360 if (button) | 357 if (button) |
361 menu_button_ = button; | 358 menu_button_ = button; |
362 | 359 |
363 // Make sure Chrome doesn't attempt to shut down while the menu is showing. | 360 // Make sure Chrome doesn't attempt to shut down while the menu is showing. |
364 if (ViewsDelegate::views_delegate) | 361 if (ViewsDelegate::views_delegate) |
365 ViewsDelegate::views_delegate->AddRef(); | 362 ViewsDelegate::views_delegate->AddRef(); |
366 | 363 |
(...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
811 } | 808 } |
812 } | 809 } |
813 | 810 |
814 void MenuController::OnWidgetDestroying(Widget* widget) { | 811 void MenuController::OnWidgetDestroying(Widget* widget) { |
815 DCHECK_EQ(owner_, widget); | 812 DCHECK_EQ(owner_, widget); |
816 owner_->RemoveObserver(this); | 813 owner_->RemoveObserver(this); |
817 owner_ = NULL; | 814 owner_ = NULL; |
818 message_loop_->ClearOwner(); | 815 message_loop_->ClearOwner(); |
819 } | 816 } |
820 | 817 |
821 bool MenuController::IsCancelAllTimerRunningForTest() { | |
822 return cancel_all_timer_.IsRunning(); | |
823 } | |
824 | |
825 // static | 818 // static |
826 void MenuController::TurnOffMenuSelectionHoldForTest() { | 819 void MenuController::TurnOffMenuSelectionHoldForTest() { |
827 menu_selection_hold_time_ms = -1; | 820 menu_selection_hold_time_ms = -1; |
828 } | 821 } |
829 | 822 |
830 void MenuController::SetSelection(MenuItemView* menu_item, | 823 void MenuController::SetSelection(MenuItemView* menu_item, |
831 int selection_types) { | 824 int selection_types) { |
832 size_t paths_differ_at = 0; | 825 size_t paths_differ_at = 0; |
833 std::vector<MenuItemView*> current_path; | 826 std::vector<MenuItemView*> current_path; |
834 std::vector<MenuItemView*> new_path; | 827 std::vector<MenuItemView*> new_path; |
(...skipping 1471 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2306 } | 2299 } |
2307 } | 2300 } |
2308 | 2301 |
2309 gfx::Screen* MenuController::GetScreen() { | 2302 gfx::Screen* MenuController::GetScreen() { |
2310 Widget* root = owner_ ? owner_->GetTopLevelWidget() : NULL; | 2303 Widget* root = owner_ ? owner_->GetTopLevelWidget() : NULL; |
2311 return root ? gfx::Screen::GetScreenFor(root->GetNativeView()) | 2304 return root ? gfx::Screen::GetScreenFor(root->GetNativeView()) |
2312 : gfx::Screen::GetNativeScreen(); | 2305 : gfx::Screen::GetNativeScreen(); |
2313 } | 2306 } |
2314 | 2307 |
2315 } // namespace views | 2308 } // namespace views |
OLD | NEW |