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 "ash/accelerators/accelerator_table.h" | 5 #include "ash/accelerators/accelerator_table.h" |
6 | 6 |
7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
| 8 #include "ui/base/events.h" |
8 | 9 |
9 namespace ash { | 10 namespace ash { |
10 | 11 |
11 const AcceleratorData kAcceleratorData[] = { | 12 const AcceleratorData kAcceleratorData[] = { |
12 // trigger_on_press, KeyboardCode, shift, control, alt, AcceleratorAction | 13 { false, ui::VKEY_MENU, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, NEXT_IME }, |
| 14 { false, ui::VKEY_SHIFT, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, NEXT_IME }, |
| 15 { true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, PREVIOUS_IME }, |
| 16 // Shortcuts for Japanese IME. |
| 17 { true, ui::VKEY_CONVERT, ui::EF_NONE, SWITCH_IME }, |
| 18 { true, ui::VKEY_NONCONVERT, ui::EF_NONE, SWITCH_IME }, |
| 19 { true, ui::VKEY_DBE_SBCSCHAR, ui::EF_NONE, SWITCH_IME }, |
| 20 { true, ui::VKEY_DBE_DBCSCHAR, ui::EF_NONE, SWITCH_IME }, |
| 21 // Shortcuts for Koren IME. |
| 22 { true, ui::VKEY_HANGUL, ui::EF_NONE, SWITCH_IME }, |
| 23 { true, ui::VKEY_SPACE, ui::EF_SHIFT_DOWN, SWITCH_IME }, |
13 | 24 |
14 { false, ui::VKEY_MENU, true, false, true, NEXT_IME }, | 25 { true, ui::VKEY_TAB, |
15 { false, ui::VKEY_SHIFT, true, false, true, NEXT_IME }, | 26 ui::EF_ALT_DOWN, CYCLE_FORWARD_MRU }, |
16 { true, ui::VKEY_SPACE, false, true, false, PREVIOUS_IME }, | 27 { true, ui::VKEY_TAB, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, |
17 // Shortcuts for Japanese IME. | 28 CYCLE_BACKWARD_MRU }, |
18 { true, ui::VKEY_CONVERT, false, false, false, SWITCH_IME }, | 29 { true, ui::VKEY_F5, ui::EF_NONE, CYCLE_FORWARD_LINEAR }, |
19 { true, ui::VKEY_NONCONVERT, false, false, false, SWITCH_IME }, | |
20 { true, ui::VKEY_DBE_SBCSCHAR, false, false, false, SWITCH_IME }, | |
21 { true, ui::VKEY_DBE_DBCSCHAR, false, false, false, SWITCH_IME }, | |
22 // Shortcuts for Koren IME. | |
23 { true, ui::VKEY_HANGUL, false, false, false, SWITCH_IME }, | |
24 { true, ui::VKEY_SPACE, true, false, false, SWITCH_IME }, | |
25 | |
26 { true, ui::VKEY_TAB, false, false, true, CYCLE_FORWARD_MRU }, | |
27 { true, ui::VKEY_TAB, true, false, true, CYCLE_BACKWARD_MRU }, | |
28 { true, ui::VKEY_F5, false, false, false, CYCLE_FORWARD_LINEAR }, | |
29 #if defined(OS_CHROMEOS) | 30 #if defined(OS_CHROMEOS) |
30 { true, ui::VKEY_BRIGHTNESS_DOWN, false, false, false, BRIGHTNESS_DOWN }, | 31 { true, ui::VKEY_BRIGHTNESS_DOWN, ui::EF_NONE, BRIGHTNESS_DOWN }, |
31 { true, ui::VKEY_BRIGHTNESS_UP, false, false, false, BRIGHTNESS_UP }, | 32 { true, ui::VKEY_BRIGHTNESS_UP, ui::EF_NONE, BRIGHTNESS_UP }, |
32 { true, ui::VKEY_L, true, true, false, LOCK_SCREEN }, | 33 { true, ui::VKEY_L, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, LOCK_SCREEN }, |
33 { true, ui::VKEY_M, false, true, false, OPEN_FILE_MANAGER }, | 34 { true, ui::VKEY_M, ui::EF_CONTROL_DOWN, OPEN_FILE_MANAGER }, |
34 { true, ui::VKEY_T, false, true, true, OPEN_CROSH }, | 35 { true, ui::VKEY_T, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, OPEN_CROSH }, |
35 #endif | 36 #endif |
36 { true, ui::VKEY_Q, true, true, false, EXIT }, | 37 { true, ui::VKEY_Q, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, EXIT }, |
37 { true, ui::VKEY_Z, false, true, true, TOGGLE_SPOKEN_FEEDBACK }, | 38 { true, ui::VKEY_Z, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, |
| 39 TOGGLE_SPOKEN_FEEDBACK }, |
38 | 40 |
39 // When you change the shortcut for NEW_INCOGNITO_WINDOW or NEW_WINDOW, | 41 // When you change the shortcut for NEW_INCOGNITO_WINDOW or NEW_WINDOW, |
40 // you also need to modify ToolbarView::GetAcceleratorForCommandId() in | 42 // you also need to modify ToolbarView::GetAcceleratorForCommandId() in |
41 // chrome/browser/ui/views/toolbar_view.cc. | 43 // chrome/browser/ui/views/toolbar_view.cc. |
42 { true, ui::VKEY_N, true, true, false, NEW_INCOGNITO_WINDOW }, | 44 { true, ui::VKEY_N, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, |
43 { true, ui::VKEY_N, false, true, false, NEW_WINDOW }, | 45 NEW_INCOGNITO_WINDOW }, |
| 46 { true, ui::VKEY_N, ui::EF_CONTROL_DOWN, NEW_WINDOW }, |
44 | 47 |
45 { true, ui::VKEY_F5, true, false, false, CYCLE_BACKWARD_LINEAR }, | 48 { true, ui::VKEY_F5, ui::EF_SHIFT_DOWN, CYCLE_BACKWARD_LINEAR }, |
46 { true, ui::VKEY_F5, false, true, false, TAKE_SCREENSHOT }, | 49 { true, ui::VKEY_F5, ui::EF_CONTROL_DOWN, TAKE_SCREENSHOT }, |
47 { true, ui::VKEY_F5, true, true, false, TAKE_PARTIAL_SCREENSHOT }, | 50 { true, ui::VKEY_F5, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, |
48 { true, ui::VKEY_PRINT, false, false, false, TAKE_SCREENSHOT }, | 51 TAKE_PARTIAL_SCREENSHOT }, |
| 52 { true, ui::VKEY_PRINT, ui::EF_NONE, TAKE_SCREENSHOT }, |
49 // On Chrome OS, Search key is mapped to LWIN. | 53 // On Chrome OS, Search key is mapped to LWIN. |
50 { true, ui::VKEY_LWIN, false, false, false, SEARCH_KEY }, | 54 { true, ui::VKEY_LWIN, ui::EF_NONE, SEARCH_KEY }, |
51 { true, ui::VKEY_LWIN, false, true, false, TOGGLE_APP_LIST }, | 55 { true, ui::VKEY_LWIN, ui::EF_CONTROL_DOWN, TOGGLE_APP_LIST }, |
52 { true, ui::VKEY_LWIN, true, false, false, TOGGLE_CAPS_LOCK }, | 56 { true, ui::VKEY_LWIN, ui::EF_SHIFT_DOWN, TOGGLE_CAPS_LOCK }, |
53 { true, ui::VKEY_F6, false, false, false, BRIGHTNESS_DOWN }, | 57 { true, ui::VKEY_F6, ui::EF_NONE, BRIGHTNESS_DOWN }, |
54 { true, ui::VKEY_F7, false, false, false, BRIGHTNESS_UP }, | 58 { true, ui::VKEY_F7, ui::EF_NONE, BRIGHTNESS_UP }, |
55 { true, ui::VKEY_F8, false, false, false, VOLUME_MUTE }, | 59 { true, ui::VKEY_F8, ui::EF_NONE, VOLUME_MUTE }, |
56 { true, ui::VKEY_VOLUME_MUTE, false, false, false, VOLUME_MUTE }, | 60 { true, ui::VKEY_VOLUME_MUTE, ui::EF_NONE, VOLUME_MUTE }, |
57 { true, ui::VKEY_F9, false, false, false, VOLUME_DOWN }, | 61 { true, ui::VKEY_F9, ui::EF_NONE, VOLUME_DOWN }, |
58 { true, ui::VKEY_VOLUME_DOWN, false, false, false, VOLUME_DOWN }, | 62 { true, ui::VKEY_VOLUME_DOWN, ui::EF_NONE, VOLUME_DOWN }, |
59 { true, ui::VKEY_F10, false, false, false, VOLUME_UP }, | 63 { true, ui::VKEY_F10, ui::EF_NONE, VOLUME_UP }, |
60 { true, ui::VKEY_VOLUME_UP, false, false, false, VOLUME_UP }, | 64 { true, ui::VKEY_VOLUME_UP, ui::EF_NONE, VOLUME_UP }, |
61 { true, ui::VKEY_L, true, false, true, FOCUS_LAUNCHER }, | 65 { true, ui::VKEY_L, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, FOCUS_LAUNCHER }, |
62 { true, ui::VKEY_S, true, false, true, FOCUS_TRAY }, | 66 { true, ui::VKEY_S, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, FOCUS_TRAY }, |
63 { true, ui::VKEY_OEM_2, false, true, true, SHOW_KEYBOARD_OVERLAY }, | 67 { true, ui::VKEY_OEM_2, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, |
64 { true, ui::VKEY_OEM_2, true, true, true, SHOW_KEYBOARD_OVERLAY }, | 68 SHOW_KEYBOARD_OVERLAY }, |
65 { true, ui::VKEY_F1, true, true, false, SHOW_OAK }, | 69 { true, ui::VKEY_OEM_2, |
66 { true, ui::VKEY_1, false, false, true, SELECT_WIN_0 }, | 70 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, |
67 { true, ui::VKEY_2, false, false, true, SELECT_WIN_1 }, | 71 SHOW_KEYBOARD_OVERLAY }, |
68 { true, ui::VKEY_3, false, false, true, SELECT_WIN_2 }, | 72 { true, ui::VKEY_F1, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, SHOW_OAK }, |
69 { true, ui::VKEY_4, false, false, true, SELECT_WIN_3 }, | 73 { true, ui::VKEY_1, ui::EF_ALT_DOWN, SELECT_WIN_0 }, |
70 { true, ui::VKEY_5, false, false, true, SELECT_WIN_4 }, | 74 { true, ui::VKEY_2, ui::EF_ALT_DOWN, SELECT_WIN_1 }, |
71 { true, ui::VKEY_6, false, false, true, SELECT_WIN_5 }, | 75 { true, ui::VKEY_3, ui::EF_ALT_DOWN, SELECT_WIN_2 }, |
72 { true, ui::VKEY_7, false, false, true, SELECT_WIN_6 }, | 76 { true, ui::VKEY_4, ui::EF_ALT_DOWN, SELECT_WIN_3 }, |
73 { true, ui::VKEY_8, false, false, true, SELECT_WIN_7 }, | 77 { true, ui::VKEY_5, ui::EF_ALT_DOWN, SELECT_WIN_4 }, |
74 { true, ui::VKEY_9, false, false, true, SELECT_LAST_WIN }, | 78 { true, ui::VKEY_6, ui::EF_ALT_DOWN, SELECT_WIN_5 }, |
| 79 { true, ui::VKEY_7, ui::EF_ALT_DOWN, SELECT_WIN_6 }, |
| 80 { true, ui::VKEY_8, ui::EF_ALT_DOWN, SELECT_WIN_7 }, |
| 81 { true, ui::VKEY_9, ui::EF_ALT_DOWN, SELECT_LAST_WIN }, |
75 | 82 |
76 // We need the number keys with and without shift since the French keyboard | 83 // We need the number keys with and without shift since the French keyboard |
77 // does not have explicit number keys. Instead they have to press | 84 // does not have explicit number keys. Instead they have to press |
78 // 'Shift' + .. to access the keys. If we ever have an overlap of | 85 // 'Shift' + .. to access the keys. If we ever have an overlap of |
79 // functionality, we should think about either assembling this table | 86 // functionality, we should think about either assembling this table |
80 // dynamically - or by decoding the keys properly (which is of course in | 87 // dynamically - or by decoding the keys properly (which is of course in |
81 // conflict with other keyboards since the Shift+ is missing then). | 88 // conflict with other keyboards since the Shift+ is missing then). |
82 { true, ui::VKEY_1, true, false, true, SELECT_WIN_0 }, | 89 { true, ui::VKEY_1, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, SELECT_WIN_0 }, |
83 { true, ui::VKEY_2, true, false, true, SELECT_WIN_1 }, | 90 { true, ui::VKEY_2, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, SELECT_WIN_1 }, |
84 { true, ui::VKEY_3, true, false, true, SELECT_WIN_2 }, | 91 { true, ui::VKEY_3, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, SELECT_WIN_2 }, |
85 { true, ui::VKEY_4, true, false, true, SELECT_WIN_3 }, | 92 { true, ui::VKEY_4, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, SELECT_WIN_3 }, |
86 { true, ui::VKEY_5, true, false, true, SELECT_WIN_4 }, | 93 { true, ui::VKEY_5, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, SELECT_WIN_4 }, |
87 { true, ui::VKEY_6, true, false, true, SELECT_WIN_5 }, | 94 { true, ui::VKEY_6, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, SELECT_WIN_5 }, |
88 { true, ui::VKEY_7, true, false, true, SELECT_WIN_6 }, | 95 { true, ui::VKEY_7, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, SELECT_WIN_6 }, |
89 { true, ui::VKEY_8, true, false, true, SELECT_WIN_7 }, | 96 { true, ui::VKEY_8, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, SELECT_WIN_7 }, |
90 { true, ui::VKEY_9, true, false, true, SELECT_LAST_WIN }, | 97 { true, ui::VKEY_9, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, SELECT_LAST_WIN }, |
91 | 98 |
92 // Window management shortcuts. | 99 // Window management shortcuts. |
93 { true, ui::VKEY_OEM_4, false, false, true, WINDOW_SNAP_LEFT }, | 100 { true, ui::VKEY_OEM_4, ui::EF_ALT_DOWN, WINDOW_SNAP_LEFT }, |
94 { true, ui::VKEY_OEM_6, false, false, true, WINDOW_SNAP_RIGHT }, | 101 { true, ui::VKEY_OEM_6, ui::EF_ALT_DOWN, WINDOW_SNAP_RIGHT }, |
95 { true, ui::VKEY_OEM_MINUS, false, false, true, WINDOW_MINIMIZE }, | 102 { true, ui::VKEY_OEM_MINUS, ui::EF_ALT_DOWN, WINDOW_MINIMIZE }, |
96 { true, ui::VKEY_OEM_PLUS, false, false, true, WINDOW_MAXIMIZE_RESTORE }, | 103 { true, ui::VKEY_OEM_PLUS, ui::EF_ALT_DOWN, WINDOW_MAXIMIZE_RESTORE }, |
97 { true, ui::VKEY_OEM_PLUS, true, false, true, WINDOW_POSITION_CENTER }, | 104 { true, ui::VKEY_OEM_PLUS, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, |
| 105 WINDOW_POSITION_CENTER }, |
98 | 106 |
99 { true, ui::VKEY_F3, true, true, true, ROTATE_WINDOWS }, | 107 { true, ui::VKEY_F3, |
| 108 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, |
| 109 ROTATE_WINDOWS }, |
100 #if !defined(NDEBUG) | 110 #if !defined(NDEBUG) |
101 { true, ui::VKEY_HOME, false, true, false, ROTATE_SCREEN }, | 111 { true, ui::VKEY_HOME, ui::EF_CONTROL_DOWN, ROTATE_SCREEN }, |
102 { true, ui::VKEY_B, false, true, true, TOGGLE_DESKTOP_BACKGROUND_MODE }, | 112 { true, ui::VKEY_B, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, |
103 { true, ui::VKEY_F11, false, true, false, TOGGLE_ROOT_WINDOW_FULL_SCREEN }, | 113 TOGGLE_DESKTOP_BACKGROUND_MODE }, |
104 { true, ui::VKEY_L, true, true, true, PRINT_LAYER_HIERARCHY }, | 114 { true, ui::VKEY_F11, ui::EF_CONTROL_DOWN, TOGGLE_ROOT_WINDOW_FULL_SCREEN }, |
105 { true, ui::VKEY_W, true, true, true, PRINT_WINDOW_HIERARCHY }, | 115 { true, ui::VKEY_L, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, |
| 116 PRINT_LAYER_HIERARCHY }, |
| 117 { true, ui::VKEY_W, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, |
| 118 PRINT_WINDOW_HIERARCHY }, |
106 // For testing on systems where Alt-Tab is already mapped. | 119 // For testing on systems where Alt-Tab is already mapped. |
107 { true, ui::VKEY_W, false, false, true, CYCLE_FORWARD_MRU }, | 120 { true, ui::VKEY_W, ui::EF_ALT_DOWN, CYCLE_FORWARD_MRU }, |
108 { true, ui::VKEY_W, true, false, true, CYCLE_BACKWARD_MRU }, | 121 { true, ui::VKEY_W, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, CYCLE_BACKWARD_MRU }, |
109 { true, ui::VKEY_F4, false, true, false, MONITOR_ADD_REMOVE }, | 122 { true, ui::VKEY_F4, ui::EF_CONTROL_DOWN, MONITOR_ADD_REMOVE }, |
110 { true, ui::VKEY_F4, true, true, false, MONITOR_CYCLE }, | 123 { true, ui::VKEY_F4, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, MONITOR_CYCLE }, |
111 { true, ui::VKEY_HOME, true, true, false, MONITOR_TOGGLE_SCALE }, | 124 { true, ui::VKEY_HOME, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, |
| 125 MONITOR_TOGGLE_SCALE }, |
112 #endif | 126 #endif |
113 // trigger_on_press, KeyboardCode, shift, control, alt, AcceleratorAction | |
114 }; | 127 }; |
115 | 128 |
116 const size_t kAcceleratorDataLength = arraysize(kAcceleratorData); | 129 const size_t kAcceleratorDataLength = arraysize(kAcceleratorData); |
117 | 130 |
118 const AcceleratorAction kActionsAllowedAtLoginScreen[] = { | 131 const AcceleratorAction kActionsAllowedAtLoginScreen[] = { |
119 BRIGHTNESS_DOWN, | 132 BRIGHTNESS_DOWN, |
120 BRIGHTNESS_UP, | 133 BRIGHTNESS_UP, |
121 NEXT_IME, | 134 NEXT_IME, |
122 PREVIOUS_IME, | 135 PREVIOUS_IME, |
123 SWITCH_IME, // Switch to another IME depending on the accelerator. | 136 SWITCH_IME, // Switch to another IME depending on the accelerator. |
124 TAKE_SCREENSHOT, | 137 TAKE_SCREENSHOT, |
125 TAKE_PARTIAL_SCREENSHOT, | 138 TAKE_PARTIAL_SCREENSHOT, |
126 TOGGLE_CAPS_LOCK, | 139 TOGGLE_CAPS_LOCK, |
127 TOGGLE_SPOKEN_FEEDBACK, | 140 TOGGLE_SPOKEN_FEEDBACK, |
128 VOLUME_DOWN, | 141 VOLUME_DOWN, |
129 VOLUME_MUTE, | 142 VOLUME_MUTE, |
130 VOLUME_UP, | 143 VOLUME_UP, |
131 ROTATE_WINDOWS, | 144 ROTATE_WINDOWS, |
132 #if !defined(NDEBUG) | 145 #if !defined(NDEBUG) |
133 PRINT_LAYER_HIERARCHY, | 146 PRINT_LAYER_HIERARCHY, |
134 PRINT_WINDOW_HIERARCHY, | 147 PRINT_WINDOW_HIERARCHY, |
135 ROTATE_SCREEN, | 148 ROTATE_SCREEN, |
136 #endif | 149 #endif |
137 }; | 150 }; |
138 | 151 |
139 const size_t kActionsAllowedAtLoginScreenLength = | 152 const size_t kActionsAllowedAtLoginScreenLength = |
140 arraysize(kActionsAllowedAtLoginScreen); | 153 arraysize(kActionsAllowedAtLoginScreen); |
141 | 154 |
142 } // namespace ash | 155 } // namespace ash |
OLD | NEW |