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 "chrome/browser/ui/views/accelerator_table.h" | 5 #include "chrome/browser/ui/views/accelerator_table.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <algorithm> | |
| 10 #include <initializer_list> | |
| 11 #include <set> | |
|
tapted
2016/11/09 22:29:51
(remember to update the #includes)
| |
| 12 #include <tuple> | |
| 13 | |
| 9 #include "base/macros.h" | 14 #include "base/macros.h" |
| 10 #include "build/build_config.h" | 15 #include "build/build_config.h" |
| 11 #include "chrome/app/chrome_command_ids.h" | 16 #include "chrome/app/chrome_command_ids.h" |
| 12 #include "ui/base/accelerators/accelerator.h" | 17 #include "ui/base/accelerators/accelerator.h" |
| 13 #include "ui/events/event_constants.h" | 18 #include "ui/events/event_constants.h" |
| 14 | 19 |
| 15 #if defined(USE_ASH) | 20 #if defined(USE_ASH) |
| 16 #include "ash/common/accelerators/accelerator_table.h" // nogncheck | 21 #include "ash/common/accelerators/accelerator_table.h" // nogncheck |
| 17 #endif | 22 #endif |
| 18 | 23 |
| 19 namespace chrome { | 24 namespace chrome { |
| 20 namespace { | 25 namespace { |
| 21 | 26 |
| 22 // For many commands, the Mac equivalent uses Cmd instead of Ctrl. We only need | 27 // For many commands, the Mac equivalent uses Cmd instead of Ctrl. We only need |
| 23 // to list the ones that do not have a key equivalent in the main menu, i.e. | 28 // to list the ones that do not have a key equivalent in the main menu, i.e. |
| 24 // only the ones in global_keyboard_shortcuts_mac.mm. | 29 // only the ones in global_keyboard_shortcuts_mac.mm. |
| 25 // TODO(jackhou): If-def out the accelerators that should not be on Mac. | |
| 26 #if defined(OS_MACOSX) | 30 #if defined(OS_MACOSX) |
| 27 const ui::EventFlags kPlatformModifier = ui::EF_COMMAND_DOWN; | 31 const ui::EventFlags kPlatformModifier = ui::EF_COMMAND_DOWN; |
| 28 #else | 32 #else |
| 29 const ui::EventFlags kPlatformModifier = ui::EF_CONTROL_DOWN; | 33 const ui::EventFlags kPlatformModifier = ui::EF_CONTROL_DOWN; |
| 30 #endif | 34 #endif |
| 31 | 35 |
| 32 // NOTE: Keep this list in the same (mostly-alphabetical) order as | 36 // NOTE: Keep this list in the same (mostly-alphabetical) order as |
| 33 // the Windows accelerators in ../../app/chrome_dll.rc. | 37 // the Windows accelerators in ../../app/chrome_dll.rc. |
|
tapted
2016/11/09 22:29:52
This comment was one of the motivations for the fi
themblsha
2016/11/10 14:18:05
BTW is there any reason that chrome_dll.rc is not
Peter Kasting
2016/11/10 17:56:38
Not that I know of.
I vote for "sort that list",
themblsha
2016/11/11 12:20:32
Ok, I'll create a separate CL for that.
| |
| 34 // Do not use Ctrl-Alt as a shortcut modifier, as it is used by i18n keyboards: | 38 // Do not use Ctrl-Alt as a shortcut modifier, as it is used by i18n keyboards: |
| 35 // http://blogs.msdn.com/b/oldnewthing/archive/2004/03/29/101121.aspx | 39 // http://blogs.msdn.com/b/oldnewthing/archive/2004/03/29/101121.aspx |
| 36 const AcceleratorMapping kAcceleratorMap[] = { | 40 const AcceleratorMapping kAcceleratorMap[] = { |
| 37 { ui::VKEY_LEFT, ui::EF_ALT_DOWN, IDC_BACK }, | 41 { ui::VKEY_LEFT, ui::EF_ALT_DOWN, IDC_BACK }, |
| 38 { ui::VKEY_BACK, ui::EF_NONE, IDC_BACKSPACE_BACK }, | 42 { ui::VKEY_BACK, ui::EF_NONE, IDC_BACKSPACE_BACK }, |
| 39 { ui::VKEY_D, ui::EF_CONTROL_DOWN, IDC_BOOKMARK_PAGE }, | 43 { ui::VKEY_D, kPlatformModifier, IDC_BOOKMARK_PAGE }, |
| 40 { ui::VKEY_D, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, | 44 { ui::VKEY_D, ui::EF_SHIFT_DOWN | kPlatformModifier, |
| 41 IDC_BOOKMARK_ALL_TABS }, | 45 IDC_BOOKMARK_ALL_TABS }, |
| 42 { ui::VKEY_W, ui::EF_CONTROL_DOWN, IDC_CLOSE_TAB }, | 46 { ui::VKEY_W, kPlatformModifier, IDC_CLOSE_TAB }, |
| 43 { ui::VKEY_W, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, IDC_CLOSE_WINDOW }, | 47 { ui::VKEY_W, ui::EF_SHIFT_DOWN | kPlatformModifier, IDC_CLOSE_WINDOW }, |
| 44 { ui::VKEY_F, ui::EF_CONTROL_DOWN, IDC_FIND }, | 48 { ui::VKEY_F, kPlatformModifier, IDC_FIND }, |
| 45 { ui::VKEY_G, ui::EF_CONTROL_DOWN, IDC_FIND_NEXT }, | 49 { ui::VKEY_G, kPlatformModifier, IDC_FIND_NEXT }, |
| 46 { ui::VKEY_G, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, IDC_FIND_PREVIOUS }, | 50 { ui::VKEY_G, ui::EF_SHIFT_DOWN | kPlatformModifier, IDC_FIND_PREVIOUS }, |
| 47 { ui::VKEY_D, ui::EF_ALT_DOWN, IDC_FOCUS_LOCATION }, | 51 { ui::VKEY_D, ui::EF_ALT_DOWN, IDC_FOCUS_LOCATION }, |
| 48 { ui::VKEY_L, ui::EF_CONTROL_DOWN, IDC_FOCUS_LOCATION }, | 52 { ui::VKEY_L, kPlatformModifier, IDC_FOCUS_LOCATION }, |
| 49 { ui::VKEY_K, ui::EF_CONTROL_DOWN, IDC_FOCUS_SEARCH }, | |
| 50 { ui::VKEY_E, ui::EF_CONTROL_DOWN, IDC_FOCUS_SEARCH }, | |
| 51 { ui::VKEY_T, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, IDC_FOCUS_TOOLBAR }, | 53 { ui::VKEY_T, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, IDC_FOCUS_TOOLBAR }, |
| 52 { ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, IDC_FOCUS_BOOKMARKS }, | 54 { ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, IDC_FOCUS_BOOKMARKS }, |
| 53 { ui::VKEY_A, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, IDC_FOCUS_INFOBARS }, | 55 { ui::VKEY_A, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, IDC_FOCUS_INFOBARS }, |
| 54 { ui::VKEY_RIGHT, ui::EF_ALT_DOWN, IDC_FORWARD }, | 56 { ui::VKEY_RIGHT, ui::EF_ALT_DOWN, IDC_FORWARD }, |
| 55 { ui::VKEY_BACK, ui::EF_SHIFT_DOWN, IDC_BACKSPACE_FORWARD }, | 57 { ui::VKEY_BACK, ui::EF_SHIFT_DOWN, IDC_BACKSPACE_FORWARD }, |
| 56 { ui::VKEY_I, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, IDC_DEV_TOOLS }, | |
| 57 { ui::VKEY_F12, ui::EF_NONE, IDC_DEV_TOOLS_TOGGLE }, | 58 { ui::VKEY_F12, ui::EF_NONE, IDC_DEV_TOOLS_TOGGLE }, |
| 58 { ui::VKEY_J, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, | 59 { ui::VKEY_O, kPlatformModifier, IDC_OPEN_FILE }, |
| 59 IDC_DEV_TOOLS_CONSOLE }, | 60 { ui::VKEY_P, kPlatformModifier, IDC_PRINT }, |
| 60 { ui::VKEY_C, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, | 61 { ui::VKEY_R, kPlatformModifier, IDC_RELOAD }, |
| 61 IDC_DEV_TOOLS_INSPECT }, | 62 { ui::VKEY_R, ui::EF_SHIFT_DOWN | kPlatformModifier, |
| 62 { ui::VKEY_O, ui::EF_CONTROL_DOWN, IDC_OPEN_FILE }, | |
| 63 { ui::VKEY_P, ui::EF_CONTROL_DOWN, IDC_PRINT}, | |
| 64 #if defined(ENABLE_BASIC_PRINTING) | |
| 65 { ui::VKEY_P, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, IDC_BASIC_PRINT}, | |
| 66 #endif // ENABLE_BASIC_PRINTING | |
| 67 { ui::VKEY_R, ui::EF_CONTROL_DOWN, IDC_RELOAD }, | |
| 68 { ui::VKEY_R, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, | |
| 69 IDC_RELOAD_BYPASSING_CACHE }, | 63 IDC_RELOAD_BYPASSING_CACHE }, |
| 70 { ui::VKEY_HOME, ui::EF_ALT_DOWN, IDC_HOME }, | 64 { ui::VKEY_HOME, ui::EF_ALT_DOWN, IDC_HOME }, |
| 71 { ui::VKEY_S, ui::EF_CONTROL_DOWN, IDC_SAVE_PAGE }, | 65 { ui::VKEY_S, kPlatformModifier, IDC_SAVE_PAGE }, |
| 72 { ui::VKEY_9, kPlatformModifier, IDC_SELECT_LAST_TAB }, | 66 { ui::VKEY_9, kPlatformModifier, IDC_SELECT_LAST_TAB }, |
| 73 { ui::VKEY_NUMPAD9, kPlatformModifier, IDC_SELECT_LAST_TAB }, | 67 { ui::VKEY_NUMPAD9, kPlatformModifier, IDC_SELECT_LAST_TAB }, |
| 74 #if defined(OS_LINUX) && !defined(OS_CHROMEOS) | 68 #if defined(OS_LINUX) && !defined(OS_CHROMEOS) |
| 75 { ui::VKEY_9, ui::EF_ALT_DOWN, IDC_SELECT_LAST_TAB }, | 69 { ui::VKEY_9, ui::EF_ALT_DOWN, IDC_SELECT_LAST_TAB }, |
| 76 { ui::VKEY_NUMPAD9, ui::EF_ALT_DOWN, IDC_SELECT_LAST_TAB }, | 70 { ui::VKEY_NUMPAD9, ui::EF_ALT_DOWN, IDC_SELECT_LAST_TAB }, |
| 77 { ui::VKEY_NEXT, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, IDC_MOVE_TAB_NEXT }, | 71 { ui::VKEY_NEXT, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, IDC_MOVE_TAB_NEXT }, |
| 78 { ui::VKEY_PRIOR, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, | 72 { ui::VKEY_PRIOR, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, |
| 79 IDC_MOVE_TAB_PREVIOUS }, | 73 IDC_MOVE_TAB_PREVIOUS }, |
| 80 #endif | 74 #endif |
| 81 { ui::VKEY_TAB, ui::EF_CONTROL_DOWN, IDC_SELECT_NEXT_TAB }, | 75 { ui::VKEY_TAB, ui::EF_CONTROL_DOWN, IDC_SELECT_NEXT_TAB }, |
| (...skipping 29 matching lines...) Expand all Loading... | |
| 111 { ui::VKEY_5, ui::EF_ALT_DOWN, IDC_SELECT_TAB_4 }, | 105 { ui::VKEY_5, ui::EF_ALT_DOWN, IDC_SELECT_TAB_4 }, |
| 112 { ui::VKEY_NUMPAD5, ui::EF_ALT_DOWN, IDC_SELECT_TAB_4 }, | 106 { ui::VKEY_NUMPAD5, ui::EF_ALT_DOWN, IDC_SELECT_TAB_4 }, |
| 113 { ui::VKEY_6, ui::EF_ALT_DOWN, IDC_SELECT_TAB_5 }, | 107 { ui::VKEY_6, ui::EF_ALT_DOWN, IDC_SELECT_TAB_5 }, |
| 114 { ui::VKEY_NUMPAD6, ui::EF_ALT_DOWN, IDC_SELECT_TAB_5 }, | 108 { ui::VKEY_NUMPAD6, ui::EF_ALT_DOWN, IDC_SELECT_TAB_5 }, |
| 115 { ui::VKEY_7, ui::EF_ALT_DOWN, IDC_SELECT_TAB_6 }, | 109 { ui::VKEY_7, ui::EF_ALT_DOWN, IDC_SELECT_TAB_6 }, |
| 116 { ui::VKEY_NUMPAD7, ui::EF_ALT_DOWN, IDC_SELECT_TAB_6 }, | 110 { ui::VKEY_NUMPAD7, ui::EF_ALT_DOWN, IDC_SELECT_TAB_6 }, |
| 117 { ui::VKEY_8, ui::EF_ALT_DOWN, IDC_SELECT_TAB_7 }, | 111 { ui::VKEY_8, ui::EF_ALT_DOWN, IDC_SELECT_TAB_7 }, |
| 118 { ui::VKEY_NUMPAD8, ui::EF_ALT_DOWN, IDC_SELECT_TAB_7 }, | 112 { ui::VKEY_NUMPAD8, ui::EF_ALT_DOWN, IDC_SELECT_TAB_7 }, |
| 119 { ui::VKEY_BROWSER_FAVORITES, ui::EF_NONE, IDC_SHOW_BOOKMARK_BAR }, | 113 { ui::VKEY_BROWSER_FAVORITES, ui::EF_NONE, IDC_SHOW_BOOKMARK_BAR }, |
| 120 #endif | 114 #endif |
| 121 { ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, | 115 { ui::VKEY_B, ui::EF_SHIFT_DOWN | kPlatformModifier, |
| 122 IDC_SHOW_BOOKMARK_BAR }, | 116 IDC_SHOW_BOOKMARK_BAR }, |
| 123 { ui::VKEY_O, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, | |
| 124 IDC_SHOW_BOOKMARK_MANAGER }, | |
| 125 { ui::VKEY_J, ui::EF_CONTROL_DOWN, IDC_SHOW_DOWNLOADS }, | |
| 126 { ui::VKEY_H, ui::EF_CONTROL_DOWN, IDC_SHOW_HISTORY }, | |
| 127 { ui::VKEY_F, ui::EF_ALT_DOWN, IDC_SHOW_APP_MENU}, | 117 { ui::VKEY_F, ui::EF_ALT_DOWN, IDC_SHOW_APP_MENU}, |
| 128 { ui::VKEY_E, ui::EF_ALT_DOWN, IDC_SHOW_APP_MENU}, | 118 { ui::VKEY_E, ui::EF_ALT_DOWN, IDC_SHOW_APP_MENU}, |
| 129 { ui::VKEY_ESCAPE, ui::EF_NONE, IDC_STOP }, | 119 { ui::VKEY_ESCAPE, ui::EF_NONE, IDC_STOP }, |
| 130 { ui::VKEY_U, ui::EF_CONTROL_DOWN, IDC_VIEW_SOURCE }, | 120 { ui::VKEY_OEM_MINUS, kPlatformModifier, IDC_ZOOM_MINUS }, |
| 131 { ui::VKEY_OEM_MINUS, ui::EF_CONTROL_DOWN, IDC_ZOOM_MINUS }, | 121 { ui::VKEY_SUBTRACT, kPlatformModifier, IDC_ZOOM_MINUS }, |
| 132 { ui::VKEY_SUBTRACT, ui::EF_CONTROL_DOWN, IDC_ZOOM_MINUS }, | 122 { ui::VKEY_0, kPlatformModifier, IDC_ZOOM_NORMAL }, |
| 133 { ui::VKEY_0, ui::EF_CONTROL_DOWN, IDC_ZOOM_NORMAL }, | 123 { ui::VKEY_NUMPAD0, kPlatformModifier, IDC_ZOOM_NORMAL }, |
| 134 { ui::VKEY_NUMPAD0, ui::EF_CONTROL_DOWN, IDC_ZOOM_NORMAL }, | 124 { ui::VKEY_OEM_PLUS, kPlatformModifier, IDC_ZOOM_PLUS }, |
| 135 { ui::VKEY_OEM_PLUS, ui::EF_CONTROL_DOWN, IDC_ZOOM_PLUS }, | 125 { ui::VKEY_ADD, kPlatformModifier, IDC_ZOOM_PLUS }, |
| 136 { ui::VKEY_ADD, ui::EF_CONTROL_DOWN, IDC_ZOOM_PLUS }, | 126 |
| 127 #if !defined(OS_MACOSX) // Function keys aren't mapped on Mac. | |
| 137 { ui::VKEY_F1, ui::EF_NONE, IDC_HELP_PAGE_VIA_KEYBOARD }, | 128 { ui::VKEY_F1, ui::EF_NONE, IDC_HELP_PAGE_VIA_KEYBOARD }, |
| 138 { ui::VKEY_F3, ui::EF_NONE, IDC_FIND_NEXT }, | 129 { ui::VKEY_F3, ui::EF_NONE, IDC_FIND_NEXT }, |
| 139 { ui::VKEY_F3, ui::EF_SHIFT_DOWN, IDC_FIND_PREVIOUS }, | 130 { ui::VKEY_F3, ui::EF_SHIFT_DOWN, IDC_FIND_PREVIOUS }, |
| 140 { ui::VKEY_F4, ui::EF_CONTROL_DOWN, IDC_CLOSE_TAB }, | 131 { ui::VKEY_F4, ui::EF_CONTROL_DOWN, IDC_CLOSE_TAB }, |
| 141 { ui::VKEY_F4, ui::EF_ALT_DOWN, IDC_CLOSE_WINDOW }, | 132 { ui::VKEY_F4, ui::EF_ALT_DOWN, IDC_CLOSE_WINDOW }, |
| 142 { ui::VKEY_F5, ui::EF_NONE, IDC_RELOAD }, | 133 { ui::VKEY_F5, ui::EF_NONE, IDC_RELOAD }, |
| 143 { ui::VKEY_F5, ui::EF_CONTROL_DOWN, IDC_RELOAD_BYPASSING_CACHE }, | 134 { ui::VKEY_F5, ui::EF_CONTROL_DOWN, IDC_RELOAD_BYPASSING_CACHE }, |
| 144 { ui::VKEY_F5, ui::EF_SHIFT_DOWN, IDC_RELOAD_BYPASSING_CACHE }, | 135 { ui::VKEY_F5, ui::EF_SHIFT_DOWN, IDC_RELOAD_BYPASSING_CACHE }, |
| 145 { ui::VKEY_F6, ui::EF_NONE, IDC_FOCUS_NEXT_PANE }, | 136 { ui::VKEY_F6, ui::EF_NONE, IDC_FOCUS_NEXT_PANE }, |
| 146 { ui::VKEY_F6, ui::EF_SHIFT_DOWN, IDC_FOCUS_PREVIOUS_PANE }, | 137 { ui::VKEY_F6, ui::EF_SHIFT_DOWN, IDC_FOCUS_PREVIOUS_PANE }, |
| 147 { ui::VKEY_F10, ui::EF_NONE, IDC_FOCUS_MENU_BAR }, | 138 { ui::VKEY_F10, ui::EF_NONE, IDC_FOCUS_MENU_BAR }, |
| 148 { ui::VKEY_F11, ui::EF_NONE, IDC_FULLSCREEN }, | 139 { ui::VKEY_F11, ui::EF_NONE, IDC_FULLSCREEN }, |
| 140 #endif // !OS_MACOSX | |
| 149 | 141 |
| 150 // Platform-specific key maps. | 142 // Platform-specific key maps. |
| 151 #if defined(OS_LINUX) | 143 #if defined(OS_LINUX) |
| 152 { ui::VKEY_BROWSER_BACK, ui::EF_NONE, IDC_BACK }, | 144 { ui::VKEY_BROWSER_BACK, ui::EF_NONE, IDC_BACK }, |
| 153 { ui::VKEY_BROWSER_FORWARD, ui::EF_NONE, IDC_FORWARD }, | 145 { ui::VKEY_BROWSER_FORWARD, ui::EF_NONE, IDC_FORWARD }, |
| 154 { ui::VKEY_BROWSER_HOME, ui::EF_NONE, IDC_HOME }, | 146 { ui::VKEY_BROWSER_HOME, ui::EF_NONE, IDC_HOME }, |
| 155 { ui::VKEY_BROWSER_REFRESH, ui::EF_NONE, IDC_RELOAD }, | 147 { ui::VKEY_BROWSER_REFRESH, ui::EF_NONE, IDC_RELOAD }, |
| 156 { ui::VKEY_BROWSER_REFRESH, ui::EF_CONTROL_DOWN, IDC_RELOAD_BYPASSING_CACHE }, | 148 { ui::VKEY_BROWSER_REFRESH, ui::EF_CONTROL_DOWN, IDC_RELOAD_BYPASSING_CACHE }, |
| 157 { ui::VKEY_BROWSER_REFRESH, ui::EF_SHIFT_DOWN, IDC_RELOAD_BYPASSING_CACHE }, | 149 { ui::VKEY_BROWSER_REFRESH, ui::EF_SHIFT_DOWN, IDC_RELOAD_BYPASSING_CACHE }, |
| 158 #endif // defined(OS_LINUX) | 150 #endif // defined(OS_LINUX) |
| 159 | 151 |
| 160 #if defined(OS_CHROMEOS) | 152 #if defined(OS_CHROMEOS) |
| 161 // On Chrome OS, VKEY_BROWSER_SEARCH is handled in Ash. | 153 // On Chrome OS, VKEY_BROWSER_SEARCH is handled in Ash. |
| 162 { ui::VKEY_BACK, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, | 154 { ui::VKEY_BACK, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, |
| 163 IDC_CLEAR_BROWSING_DATA }, | 155 IDC_CLEAR_BROWSING_DATA }, |
| 164 { ui::VKEY_OEM_2, ui::EF_CONTROL_DOWN, IDC_HELP_PAGE_VIA_KEYBOARD }, | 156 { ui::VKEY_OEM_2, ui::EF_CONTROL_DOWN, IDC_HELP_PAGE_VIA_KEYBOARD }, |
| 165 { ui::VKEY_OEM_2, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, | 157 { ui::VKEY_OEM_2, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, |
| 166 IDC_HELP_PAGE_VIA_KEYBOARD }, | 158 IDC_HELP_PAGE_VIA_KEYBOARD }, |
| 167 { ui::VKEY_BROWSER_FAVORITES, ui::EF_NONE, IDC_SHOW_BOOKMARK_MANAGER }, | 159 { ui::VKEY_BROWSER_FAVORITES, ui::EF_NONE, IDC_SHOW_BOOKMARK_MANAGER }, |
| 168 { ui::VKEY_BROWSER_STOP, ui::EF_NONE, IDC_STOP }, | 160 { ui::VKEY_BROWSER_STOP, ui::EF_NONE, IDC_STOP }, |
| 169 { ui::VKEY_P, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | 161 { ui::VKEY_P, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, |
| 170 IDC_TOUCH_HUD_PROJECTION_TOGGLE }, | 162 IDC_TOUCH_HUD_PROJECTION_TOGGLE }, |
| 171 #else // OS_CHROMEOS | 163 #else |
| 172 { ui::VKEY_ESCAPE, ui::EF_SHIFT_DOWN, IDC_TASK_MANAGER }, | 164 { ui::VKEY_ESCAPE, ui::EF_SHIFT_DOWN, IDC_TASK_MANAGER }, |
| 173 { ui::VKEY_DELETE, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, | |
| 174 IDC_CLEAR_BROWSING_DATA }, | |
| 175 { ui::VKEY_LMENU, ui::EF_NONE, IDC_FOCUS_MENU_BAR }, | 165 { ui::VKEY_LMENU, ui::EF_NONE, IDC_FOCUS_MENU_BAR }, |
| 176 { ui::VKEY_MENU, ui::EF_NONE, IDC_FOCUS_MENU_BAR }, | 166 { ui::VKEY_MENU, ui::EF_NONE, IDC_FOCUS_MENU_BAR }, |
| 177 { ui::VKEY_RMENU, ui::EF_NONE, IDC_FOCUS_MENU_BAR }, | 167 { ui::VKEY_RMENU, ui::EF_NONE, IDC_FOCUS_MENU_BAR }, |
| 178 // On Windows, all VKEY_BROWSER_* keys except VKEY_BROWSER_SEARCH are handled | 168 // On Windows, all VKEY_BROWSER_* keys except VKEY_BROWSER_SEARCH are handled |
| 179 // via WM_APPCOMMAND. | 169 // via WM_APPCOMMAND. |
| 180 { ui::VKEY_BROWSER_SEARCH, ui::EF_NONE, IDC_FOCUS_SEARCH }, | 170 { ui::VKEY_BROWSER_SEARCH, ui::EF_NONE, IDC_FOCUS_SEARCH }, |
| 181 { ui::VKEY_M, ui::EF_SHIFT_DOWN | kPlatformModifier, IDC_SHOW_AVATAR_MENU}, | 171 { ui::VKEY_M, ui::EF_SHIFT_DOWN | kPlatformModifier, IDC_SHOW_AVATAR_MENU }, |
| 182 // On Chrome OS, these keys are assigned to change UI scale. | |
| 183 { ui::VKEY_OEM_PLUS, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, IDC_ZOOM_PLUS }, | |
| 184 { ui::VKEY_OEM_MINUS, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, | |
| 185 IDC_ZOOM_MINUS }, | |
| 186 // For each entry here add an entry into kChromeCmdId2AshActionId below | 172 // For each entry here add an entry into kChromeCmdId2AshActionId below |
| 187 // if Ash has a corresponding accelerator. | 173 // if Ash has a corresponding accelerator. |
| 188 #if defined(GOOGLE_CHROME_BUILD) | 174 #if defined(GOOGLE_CHROME_BUILD) |
| 189 { ui::VKEY_I, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, IDC_FEEDBACK }, | 175 { ui::VKEY_I, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, IDC_FEEDBACK }, |
| 190 #endif | 176 #endif |
| 177 #if !defined(OS_MACOSX) | |
| 191 { ui::VKEY_Q, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, IDC_EXIT }, | 178 { ui::VKEY_Q, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, IDC_EXIT }, |
| 192 { ui::VKEY_N, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, | 179 #endif // !OS_MACOSX |
| 180 { ui::VKEY_N, ui::EF_SHIFT_DOWN | kPlatformModifier, | |
| 193 IDC_NEW_INCOGNITO_WINDOW }, | 181 IDC_NEW_INCOGNITO_WINDOW }, |
| 194 { ui::VKEY_T, ui::EF_CONTROL_DOWN, IDC_NEW_TAB }, | 182 { ui::VKEY_T, kPlatformModifier, IDC_NEW_TAB }, |
| 195 { ui::VKEY_N, ui::EF_CONTROL_DOWN, IDC_NEW_WINDOW }, | 183 { ui::VKEY_N, kPlatformModifier, IDC_NEW_WINDOW }, |
| 196 { ui::VKEY_T, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, IDC_RESTORE_TAB }, | 184 { ui::VKEY_T, ui::EF_SHIFT_DOWN | kPlatformModifier, IDC_RESTORE_TAB }, |
| 197 #endif | 185 #endif // !OS_CHROMEOS |
| 186 | |
| 187 #if defined(OS_MACOSX) | |
| 188 // VKEY_OEM_4 is Left Brace '[{' key. | |
| 189 { ui::VKEY_OEM_4, ui::EF_COMMAND_DOWN, IDC_BACK }, | |
| 190 { ui::VKEY_LEFT, ui::EF_COMMAND_DOWN, IDC_BACK }, | |
| 191 #if defined(ENABLE_BASIC_PRINTING) | |
| 192 { ui::VKEY_P, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, IDC_BASIC_PRINT }, | |
| 193 #endif // ENABLE_BASIC_PRINTING | |
| 194 { ui::VKEY_BACK, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, | |
| 195 IDC_CLEAR_BROWSING_DATA }, | |
| 196 { ui::VKEY_V, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, | |
| 197 IDC_CONTENT_CONTEXT_PASTE_AND_MATCH_STYLE }, | |
| 198 { ui::VKEY_Z, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, | |
| 199 IDC_CONTENT_CONTEXT_REDO }, | |
| 200 { ui::VKEY_A, ui::EF_COMMAND_DOWN, IDC_CONTENT_CONTEXT_SELECTALL }, | |
| 201 { ui::VKEY_Z, ui::EF_COMMAND_DOWN, IDC_CONTENT_CONTEXT_UNDO }, | |
| 202 { ui::VKEY_I, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, IDC_DEV_TOOLS }, | |
| 203 { ui::VKEY_J, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, IDC_DEV_TOOLS_CONSOLE }, | |
| 204 { ui::VKEY_C, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, IDC_DEV_TOOLS_INSPECT}, | |
| 205 { ui::VKEY_I, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, | |
| 206 IDC_EMAIL_PAGE_LOCATION }, | |
| 207 { ui::VKEY_Q, ui::EF_COMMAND_DOWN, IDC_EXIT }, | |
| 208 { ui::VKEY_F, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, IDC_FOCUS_SEARCH }, | |
| 209 // VKEY_OEM_6 is Right Brace ']}' key. | |
| 210 { ui::VKEY_OEM_6, ui::EF_COMMAND_DOWN, IDC_FORWARD }, | |
| 211 { ui::VKEY_RIGHT, ui::EF_COMMAND_DOWN, IDC_FORWARD }, | |
| 212 { ui::VKEY_F, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN, IDC_FULLSCREEN }, | |
| 213 // VKEY_OEM_2 is Slash '/?' key. | |
| 214 { ui::VKEY_OEM_2, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, | |
| 215 IDC_HELP_PAGE_VIA_MENU }, | |
| 216 { ui::VKEY_H, ui::EF_COMMAND_DOWN, IDC_HIDE_APP }, | |
| 217 { ui::VKEY_H, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, IDC_HOME }, | |
| 218 { ui::VKEY_M, ui::EF_COMMAND_DOWN, IDC_MINIMIZE_WINDOW }, | |
| 219 { ui::VKEY_RIGHT, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, | |
| 220 IDC_SELECT_NEXT_TAB }, | |
| 221 { ui::VKEY_LEFT, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, | |
| 222 IDC_SELECT_PREVIOUS_TAB }, | |
| 223 { ui::VKEY_B, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, | |
| 224 IDC_SHOW_BOOKMARK_MANAGER }, | |
| 225 { ui::VKEY_J, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, IDC_SHOW_DOWNLOADS }, | |
| 226 { ui::VKEY_L, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, IDC_SHOW_DOWNLOADS }, | |
| 227 { ui::VKEY_Y, ui::EF_COMMAND_DOWN, IDC_SHOW_HISTORY }, | |
| 228 { ui::VKEY_OEM_PERIOD, ui::EF_COMMAND_DOWN, IDC_STOP }, | |
| 229 { ui::VKEY_U, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, IDC_VIEW_SOURCE }, | |
| 230 #else | |
| 231 // Control modifier is rarely used on Mac, so we allow it only in several | |
|
tapted
2016/11/09 22:29:51
This is now in !Mac, so the comment doesn't look r
themblsha
2016/11/10 14:18:05
I've now also added a bit about Alt-shortcuts. My
| |
| 232 // specific cases. The rest shouldn't be used on Mac and are listed below. | |
| 233 { ui::VKEY_K, ui::EF_CONTROL_DOWN, IDC_FOCUS_SEARCH }, | |
| 234 { ui::VKEY_E, ui::EF_CONTROL_DOWN, IDC_FOCUS_SEARCH }, | |
| 235 { ui::VKEY_I, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, IDC_DEV_TOOLS }, | |
|
tapted
2016/11/09 22:29:52
(E.g. Moving this down violates the desire to keep
themblsha
2016/11/10 14:18:05
Ohcrap. I've re-sorted the accelerators in this se
| |
| 236 { ui::VKEY_J, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, | |
| 237 IDC_DEV_TOOLS_CONSOLE }, | |
| 238 { ui::VKEY_C, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, | |
| 239 IDC_DEV_TOOLS_INSPECT }, | |
| 240 #if defined(ENABLE_BASIC_PRINTING) | |
| 241 { ui::VKEY_P, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, IDC_BASIC_PRINT}, | |
| 242 #endif // ENABLE_BASIC_PRINTING | |
| 243 { ui::VKEY_O, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, | |
| 244 IDC_SHOW_BOOKMARK_MANAGER }, | |
| 245 { ui::VKEY_J, ui::EF_CONTROL_DOWN, IDC_SHOW_DOWNLOADS }, | |
| 246 { ui::VKEY_H, ui::EF_CONTROL_DOWN, IDC_SHOW_HISTORY }, | |
| 247 { ui::VKEY_U, ui::EF_CONTROL_DOWN, IDC_VIEW_SOURCE }, | |
| 248 { ui::VKEY_DELETE, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, | |
| 249 IDC_CLEAR_BROWSING_DATA }, | |
| 250 // On Chrome OS, these keys are assigned to change UI scale. | |
| 251 { ui::VKEY_OEM_PLUS, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, IDC_ZOOM_PLUS }, | |
| 252 { ui::VKEY_OEM_MINUS, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, | |
| 253 IDC_ZOOM_MINUS }, | |
| 254 #endif // OS_MACOSX | |
| 198 }; | 255 }; |
| 199 const size_t kAcceleratorMapLength = arraysize(kAcceleratorMap); | |
| 200 | 256 |
| 201 const int kRepeatableCommandIds[] = { | 257 const int kRepeatableCommandIds[] = { |
| 202 IDC_FIND_NEXT, | 258 IDC_FIND_NEXT, |
| 203 IDC_FIND_PREVIOUS, | 259 IDC_FIND_PREVIOUS, |
| 204 IDC_FOCUS_NEXT_PANE, | 260 IDC_FOCUS_NEXT_PANE, |
| 205 IDC_FOCUS_PREVIOUS_PANE, | 261 IDC_FOCUS_PREVIOUS_PANE, |
| 206 IDC_MOVE_TAB_NEXT, | 262 IDC_MOVE_TAB_NEXT, |
| 207 IDC_MOVE_TAB_PREVIOUS, | 263 IDC_MOVE_TAB_PREVIOUS, |
| 208 IDC_SELECT_NEXT_TAB, | 264 IDC_SELECT_NEXT_TAB, |
| 209 IDC_SELECT_PREVIOUS_TAB, | 265 IDC_SELECT_PREVIOUS_TAB, |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 229 { IDC_RESTORE_TAB, ash::RESTORE_TAB }, | 285 { IDC_RESTORE_TAB, ash::RESTORE_TAB }, |
| 230 { IDC_TASK_MANAGER, ash::SHOW_TASK_MANAGER }, | 286 { IDC_TASK_MANAGER, ash::SHOW_TASK_MANAGER }, |
| 231 #if defined(OS_CHROMEOS) | 287 #if defined(OS_CHROMEOS) |
| 232 { IDC_TOUCH_HUD_PROJECTION_TOGGLE, ash::TOUCH_HUD_PROJECTION_TOGGLE }, | 288 { IDC_TOUCH_HUD_PROJECTION_TOGGLE, ash::TOUCH_HUD_PROJECTION_TOGGLE }, |
| 233 #endif | 289 #endif |
| 234 }; | 290 }; |
| 235 const size_t kChromeCmdId2AshActionIdLength = | 291 const size_t kChromeCmdId2AshActionIdLength = |
| 236 arraysize(kChromeCmdId2AshActionId); | 292 arraysize(kChromeCmdId2AshActionId); |
| 237 #endif // defined(USE_ASH) | 293 #endif // defined(USE_ASH) |
| 238 | 294 |
| 295 std::vector<AcceleratorMapping> GetAllAcceleratorMappings() { | |
| 296 return std::vector<AcceleratorMapping>(std::begin(kAcceleratorMap), | |
| 297 std::end(kAcceleratorMap)); | |
| 298 } | |
| 299 | |
| 239 } // namespace | 300 } // namespace |
| 240 | 301 |
| 302 std::vector<AcceleratorMapping> GetUnfilteredAcceleratorListForTesting() { | |
| 303 return GetAllAcceleratorMappings(); | |
| 304 } | |
| 305 | |
| 241 std::vector<AcceleratorMapping> GetAcceleratorList() { | 306 std::vector<AcceleratorMapping> GetAcceleratorList() { |
| 242 return std::vector<AcceleratorMapping>( | 307 static bool is_accelerator_list_initialized = false; |
| 243 kAcceleratorMap, kAcceleratorMap + kAcceleratorMapLength); | 308 CR_DEFINE_STATIC_LOCAL(std::vector<AcceleratorMapping>, accelerators, |
| 309 (GetAllAcceleratorMappings())); | |
| 310 if (is_accelerator_list_initialized) | |
| 311 return accelerators; | |
| 312 | |
| 313 is_accelerator_list_initialized = true; | |
| 314 #if defined(OS_MACOSX) | |
| 315 auto remove_accelerators = [](const AcceleratorMapping& m) { | |
|
sky
2016/11/09 18:30:32
Isn't this unnecessary now? A NDEBUG block if you
themblsha
2016/11/10 14:18:05
We still need to remove the Alt+VKEY and Alt+Shift
Peter Kasting
2016/11/10 17:56:38
If we still need this lambda regardless, then I'm
themblsha
2016/11/11 12:20:32
No, lambda is not required anymore. Here's a compl
| |
| 316 // Alt by itself (or with just shift) is never used on Mac since it's used | |
| 317 // to generate non-ASCII characters. Such commands are given Mac-specific | |
| 318 // bindings as well, so remove the mappings with Alt, but not those with | |
| 319 // Command or Control. | |
| 320 constexpr int kNonShiftMask = | |
| 321 ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN; | |
| 322 if ((m.modifiers & kNonShiftMask) == ui::EF_ALT_DOWN) | |
| 323 return true; | |
| 324 | |
| 325 return false; | |
| 326 }; | |
| 327 accelerators.erase(std::remove_if(accelerators.begin(), accelerators.end(), | |
| 328 remove_accelerators), | |
| 329 accelerators.end()); | |
| 330 #endif // OS_MACOSX | |
| 331 return accelerators; | |
| 244 } | 332 } |
| 245 | 333 |
| 246 bool GetAshAcceleratorForCommandId(int command_id, | 334 bool GetAshAcceleratorForCommandId(int command_id, |
| 247 ui::Accelerator* accelerator) { | 335 ui::Accelerator* accelerator) { |
| 248 #if defined(USE_ASH) | 336 #if defined(USE_ASH) |
| 249 for (size_t i = 0; i < kChromeCmdId2AshActionIdLength; ++i) { | 337 for (size_t i = 0; i < kChromeCmdId2AshActionIdLength; ++i) { |
| 250 if (command_id == kChromeCmdId2AshActionId[i].chrome_cmd_id) { | 338 if (command_id == kChromeCmdId2AshActionId[i].chrome_cmd_id) { |
| 251 for (size_t j = 0; j < ash::kAcceleratorDataLength; ++j) { | 339 for (size_t j = 0; j < ash::kAcceleratorDataLength; ++j) { |
| 252 if (kChromeCmdId2AshActionId[i].ash_action_id == | 340 if (kChromeCmdId2AshActionId[i].ash_action_id == |
| 253 ash::kAcceleratorData[j].action) { | 341 ash::kAcceleratorData[j].action) { |
| 254 *accelerator = ui::Accelerator(ash::kAcceleratorData[j].keycode, | 342 *accelerator = ui::Accelerator(ash::kAcceleratorData[j].keycode, |
| 255 ash::kAcceleratorData[j].modifiers); | 343 ash::kAcceleratorData[j].modifiers); |
| 256 return true; | 344 return true; |
| 257 } | 345 } |
| 258 } | 346 } |
| 259 } | 347 } |
| 260 } | 348 } |
| 261 #endif // defined(USE_ASH) | 349 #endif // defined(USE_ASH) |
| 262 return false; | 350 return false; |
| 263 } | 351 } |
| 264 | 352 |
| 265 bool GetStandardAcceleratorForCommandId(int command_id, | 353 bool GetStandardAcceleratorForCommandId(int command_id, |
| 266 ui::Accelerator* accelerator) { | 354 ui::Accelerator* accelerator) { |
| 267 // The standard Ctrl-X, Ctrl-V and Ctrl-C are not defined as accelerators | 355 // The standard Ctrl-X, Ctrl-V and Ctrl-C are not defined as accelerators |
| 268 // anywhere else. | 356 // anywhere else. |
| 269 switch (command_id) { | 357 switch (command_id) { |
| 270 case IDC_CUT: | 358 case IDC_CUT: |
| 271 *accelerator = ui::Accelerator(ui::VKEY_X, ui::EF_CONTROL_DOWN); | 359 *accelerator = ui::Accelerator(ui::VKEY_X, kPlatformModifier); |
| 272 return true; | 360 return true; |
| 273 case IDC_COPY: | 361 case IDC_COPY: |
| 274 *accelerator = ui::Accelerator(ui::VKEY_C, ui::EF_CONTROL_DOWN); | 362 *accelerator = ui::Accelerator(ui::VKEY_C, kPlatformModifier); |
| 275 return true; | 363 return true; |
| 276 case IDC_PASTE: | 364 case IDC_PASTE: |
| 277 *accelerator = ui::Accelerator(ui::VKEY_V, ui::EF_CONTROL_DOWN); | 365 *accelerator = ui::Accelerator(ui::VKEY_V, kPlatformModifier); |
| 278 return true; | 366 return true; |
| 279 } | 367 } |
| 280 return false; | 368 return false; |
| 281 } | 369 } |
| 282 | 370 |
| 283 bool IsCommandRepeatable(int command_id) { | 371 bool IsCommandRepeatable(int command_id) { |
| 284 for (size_t i = 0; i < kRepeatableCommandIdsLength; ++i) { | 372 for (size_t i = 0; i < kRepeatableCommandIdsLength; ++i) { |
| 285 if (kRepeatableCommandIds[i] == command_id) | 373 if (kRepeatableCommandIds[i] == command_id) |
| 286 return true; | 374 return true; |
| 287 } | 375 } |
| 288 return false; | 376 return false; |
| 289 } | 377 } |
| 290 | 378 |
| 291 } // namespace chrome | 379 } // namespace chrome |
| OLD | NEW |