Chromium Code Reviews| 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 786 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 797 | 797 |
| 798 void MenuController::OnDragComplete(bool should_close) { | 798 void MenuController::OnDragComplete(bool should_close) { |
| 799 DCHECK(drag_in_progress_); | 799 DCHECK(drag_in_progress_); |
| 800 drag_in_progress_ = false; | 800 drag_in_progress_ = false; |
| 801 if (showing_ && should_close && GetActiveInstance() == this) { | 801 if (showing_ && should_close && GetActiveInstance() == this) { |
| 802 CloseAllNestedMenus(); | 802 CloseAllNestedMenus(); |
| 803 Cancel(EXIT_ALL); | 803 Cancel(EXIT_ALL); |
| 804 } | 804 } |
| 805 } | 805 } |
| 806 | 806 |
| 807 ui::PostDispatchAction MenuController::OnWillDispatchKeyEvent( | |
| 808 base::char16 character, | |
| 809 ui::KeyboardCode key_code) { | |
| 810 if (exit_type() == MenuController::EXIT_ALL || | |
| 811 exit_type() == MenuController::EXIT_DESTROYED) { | |
| 812 TerminateNestedMessageLoop(); | |
| 813 return ui::POST_DISPATCH_PERFORM_DEFAULT; | |
| 814 } | |
| 815 | |
| 816 bool should_quit = character ? SelectByChar(character) : !OnKeyDown(key_code); | |
| 817 if (should_quit || exit_type() != MenuController::EXIT_NONE) | |
| 818 TerminateNestedMessageLoop(); | |
| 819 | |
| 820 return ui::POST_DISPATCH_NONE; | |
| 821 } | |
|
tapted
2015/02/04 11:55:48
This function started life being refactored out of
| |
| 822 | |
| 807 void MenuController::UpdateSubmenuSelection(SubmenuView* submenu) { | 823 void MenuController::UpdateSubmenuSelection(SubmenuView* submenu) { |
| 808 if (submenu->IsShowing()) { | 824 if (submenu->IsShowing()) { |
| 809 gfx::Point point = GetScreen()->GetCursorScreenPoint(); | 825 gfx::Point point = GetScreen()->GetCursorScreenPoint(); |
| 810 const SubmenuView* root_submenu = | 826 const SubmenuView* root_submenu = |
| 811 submenu->GetMenuItem()->GetRootMenuItem()->GetSubmenu(); | 827 submenu->GetMenuItem()->GetRootMenuItem()->GetSubmenu(); |
| 812 View::ConvertPointFromScreen( | 828 View::ConvertPointFromScreen( |
| 813 root_submenu->GetWidget()->GetRootView(), &point); | 829 root_submenu->GetWidget()->GetRootView(), &point); |
| 814 HandleMouseLocation(submenu, point); | 830 HandleMouseLocation(submenu, point); |
| 815 } | 831 } |
| 816 } | 832 } |
| (...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1021 OpenSubmenuChangeSelectionIfCan(); | 1037 OpenSubmenuChangeSelectionIfCan(); |
| 1022 break; | 1038 break; |
| 1023 | 1039 |
| 1024 case ui::VKEY_LEFT: | 1040 case ui::VKEY_LEFT: |
| 1025 if (base::i18n::IsRTL()) | 1041 if (base::i18n::IsRTL()) |
| 1026 OpenSubmenuChangeSelectionIfCan(); | 1042 OpenSubmenuChangeSelectionIfCan(); |
| 1027 else | 1043 else |
| 1028 CloseSubmenu(); | 1044 CloseSubmenu(); |
| 1029 break; | 1045 break; |
| 1030 | 1046 |
| 1047 // On Mac, treat space the same as return. | |
| 1048 #if !defined(OS_MACOSX) | |
| 1031 case ui::VKEY_SPACE: | 1049 case ui::VKEY_SPACE: |
| 1032 if (SendAcceleratorToHotTrackedView() == ACCELERATOR_PROCESSED_EXIT) | 1050 if (SendAcceleratorToHotTrackedView() == ACCELERATOR_PROCESSED_EXIT) |
| 1033 return false; | 1051 return false; |
| 1034 break; | 1052 break; |
| 1053 #endif | |
| 1035 | 1054 |
| 1036 case ui::VKEY_F4: | 1055 case ui::VKEY_F4: |
| 1037 if (!is_combobox_) | 1056 if (!is_combobox_) |
| 1038 break; | 1057 break; |
| 1039 // Fallthrough to accept or dismiss combobox menus on F4, like windows. | 1058 // Fallthrough to accept or dismiss combobox menus on F4, like windows. |
| 1040 case ui::VKEY_RETURN: | 1059 case ui::VKEY_RETURN: |
| 1060 #if defined(OS_MACOSX) | |
| 1061 case ui::VKEY_SPACE: | |
| 1062 #endif | |
| 1041 if (pending_state_.item) { | 1063 if (pending_state_.item) { |
| 1042 if (pending_state_.item->HasSubmenu()) { | 1064 if (pending_state_.item->HasSubmenu()) { |
| 1043 if (key_code == ui::VKEY_F4 && | 1065 if (key_code == ui::VKEY_F4 && |
| 1044 pending_state_.item->GetSubmenu()->IsShowing()) | 1066 pending_state_.item->GetSubmenu()->IsShowing()) |
| 1045 return false; | 1067 return false; |
| 1046 else | 1068 else |
| 1047 OpenSubmenuChangeSelectionIfCan(); | 1069 OpenSubmenuChangeSelectionIfCan(); |
| 1048 } else { | 1070 } else { |
| 1049 SendAcceleratorResultType result = SendAcceleratorToHotTrackedView(); | 1071 SendAcceleratorResultType result = SendAcceleratorToHotTrackedView(); |
| 1050 if (result == ACCELERATOR_NOT_PROCESSED && | 1072 if (result == ACCELERATOR_NOT_PROCESSED && |
| (...skipping 1255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2306 } | 2328 } |
| 2307 } | 2329 } |
| 2308 | 2330 |
| 2309 gfx::Screen* MenuController::GetScreen() { | 2331 gfx::Screen* MenuController::GetScreen() { |
| 2310 Widget* root = owner_ ? owner_->GetTopLevelWidget() : NULL; | 2332 Widget* root = owner_ ? owner_->GetTopLevelWidget() : NULL; |
| 2311 return root ? gfx::Screen::GetScreenFor(root->GetNativeView()) | 2333 return root ? gfx::Screen::GetScreenFor(root->GetNativeView()) |
| 2312 : gfx::Screen::GetNativeScreen(); | 2334 : gfx::Screen::GetNativeScreen(); |
| 2313 } | 2335 } |
| 2314 | 2336 |
| 2315 } // namespace views | 2337 } // namespace views |
| OLD | NEW |