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 <tuple> | |
12 | |
9 #include "base/macros.h" | 13 #include "base/macros.h" |
10 #include "build/build_config.h" | 14 #include "build/build_config.h" |
11 #include "chrome/app/chrome_command_ids.h" | 15 #include "chrome/app/chrome_command_ids.h" |
12 #include "ui/base/accelerators/accelerator.h" | 16 #include "ui/base/accelerators/accelerator.h" |
13 #include "ui/events/event_constants.h" | 17 #include "ui/events/event_constants.h" |
14 | 18 |
15 #if defined(USE_ASH) | 19 #if defined(USE_ASH) |
16 #include "ash/accelerators/accelerator_table.h" | 20 #include "ash/accelerators/accelerator_table.h" |
17 #endif | 21 #endif |
18 | 22 |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
163 // On Chrome OS, VKEY_BROWSER_SEARCH is handled in Ash. | 167 // On Chrome OS, VKEY_BROWSER_SEARCH is handled in Ash. |
164 { ui::VKEY_BACK, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, | 168 { ui::VKEY_BACK, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, |
165 IDC_CLEAR_BROWSING_DATA }, | 169 IDC_CLEAR_BROWSING_DATA }, |
166 { ui::VKEY_OEM_2, ui::EF_CONTROL_DOWN, IDC_HELP_PAGE_VIA_KEYBOARD }, | 170 { ui::VKEY_OEM_2, ui::EF_CONTROL_DOWN, IDC_HELP_PAGE_VIA_KEYBOARD }, |
167 { ui::VKEY_OEM_2, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, | 171 { ui::VKEY_OEM_2, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, |
168 IDC_HELP_PAGE_VIA_KEYBOARD }, | 172 IDC_HELP_PAGE_VIA_KEYBOARD }, |
169 { ui::VKEY_BROWSER_FAVORITES, ui::EF_NONE, IDC_SHOW_BOOKMARK_MANAGER }, | 173 { ui::VKEY_BROWSER_FAVORITES, ui::EF_NONE, IDC_SHOW_BOOKMARK_MANAGER }, |
170 { ui::VKEY_BROWSER_STOP, ui::EF_NONE, IDC_STOP }, | 174 { ui::VKEY_BROWSER_STOP, ui::EF_NONE, IDC_STOP }, |
171 { ui::VKEY_P, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | 175 { ui::VKEY_P, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, |
172 IDC_TOUCH_HUD_PROJECTION_TOGGLE }, | 176 IDC_TOUCH_HUD_PROJECTION_TOGGLE }, |
173 #else // !OS_MACOSX | 177 #else |
174 { ui::VKEY_ESCAPE, ui::EF_SHIFT_DOWN, IDC_TASK_MANAGER }, | 178 { ui::VKEY_ESCAPE, ui::EF_SHIFT_DOWN, IDC_TASK_MANAGER }, |
175 { ui::VKEY_DELETE, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, | 179 { ui::VKEY_DELETE, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, |
176 IDC_CLEAR_BROWSING_DATA }, | 180 IDC_CLEAR_BROWSING_DATA }, |
177 { ui::VKEY_LMENU, ui::EF_NONE, IDC_FOCUS_MENU_BAR }, | 181 { ui::VKEY_LMENU, ui::EF_NONE, IDC_FOCUS_MENU_BAR }, |
178 { ui::VKEY_MENU, ui::EF_NONE, IDC_FOCUS_MENU_BAR }, | 182 { ui::VKEY_MENU, ui::EF_NONE, IDC_FOCUS_MENU_BAR }, |
179 { ui::VKEY_RMENU, ui::EF_NONE, IDC_FOCUS_MENU_BAR }, | 183 { ui::VKEY_RMENU, ui::EF_NONE, IDC_FOCUS_MENU_BAR }, |
180 // On Windows, all VKEY_BROWSER_* keys except VKEY_BROWSER_SEARCH are handled | 184 // On Windows, all VKEY_BROWSER_* keys except VKEY_BROWSER_SEARCH are handled |
181 // via WM_APPCOMMAND. | 185 // via WM_APPCOMMAND. |
182 { ui::VKEY_BROWSER_SEARCH, ui::EF_NONE, IDC_FOCUS_SEARCH }, | 186 { ui::VKEY_BROWSER_SEARCH, ui::EF_NONE, IDC_FOCUS_SEARCH }, |
183 { ui::VKEY_M, ui::EF_SHIFT_DOWN | kPlatformModifier, IDC_SHOW_AVATAR_MENU }, | 187 { ui::VKEY_M, ui::EF_SHIFT_DOWN | kPlatformModifier, IDC_SHOW_AVATAR_MENU }, |
184 // On ChromeOS, these keys are assigned to change UI scale. | 188 // On ChromeOS, these keys are assigned to change UI scale. |
185 { ui::VKEY_OEM_PLUS, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, IDC_ZOOM_PLUS }, | 189 { ui::VKEY_OEM_PLUS, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, IDC_ZOOM_PLUS }, |
186 { ui::VKEY_OEM_MINUS, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, | 190 { ui::VKEY_OEM_MINUS, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, |
187 IDC_ZOOM_MINUS }, | 191 IDC_ZOOM_MINUS }, |
188 // For each entry here add an entry into kChromeCmdId2AshActionId below | 192 // For each entry here add an entry into kChromeCmdId2AshActionId below |
189 // if Ash has a corresponding accelerator. | 193 // if Ash has a corresponding accelerator. |
190 #if defined(GOOGLE_CHROME_BUILD) | 194 #if defined(GOOGLE_CHROME_BUILD) |
191 { ui::VKEY_I, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, IDC_FEEDBACK }, | 195 { ui::VKEY_I, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, IDC_FEEDBACK }, |
192 #endif | 196 #endif |
193 { ui::VKEY_Q, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, IDC_EXIT }, | 197 { ui::VKEY_Q, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, IDC_EXIT }, |
194 { ui::VKEY_N, ui::EF_SHIFT_DOWN | kPlatformModifier, | 198 { ui::VKEY_N, ui::EF_SHIFT_DOWN | kPlatformModifier, |
195 IDC_NEW_INCOGNITO_WINDOW }, | 199 IDC_NEW_INCOGNITO_WINDOW }, |
196 { ui::VKEY_T, kPlatformModifier, IDC_NEW_TAB }, | 200 { ui::VKEY_T, kPlatformModifier, IDC_NEW_TAB }, |
197 { ui::VKEY_N, kPlatformModifier, IDC_NEW_WINDOW }, | 201 { ui::VKEY_N, kPlatformModifier, IDC_NEW_WINDOW }, |
198 { ui::VKEY_T, ui::EF_SHIFT_DOWN | kPlatformModifier, IDC_RESTORE_TAB }, | 202 { ui::VKEY_T, ui::EF_SHIFT_DOWN | kPlatformModifier, IDC_RESTORE_TAB }, |
199 #endif // !OS_CHROMEOS && !OS_MACOSX | 203 #endif // !OS_CHROMEOS |
200 | 204 |
201 #if defined(OS_MACOSX) | 205 #if defined(OS_MACOSX) |
tapted
2016/06/28 05:19:55
Something weird has happened with the diff - I thi
| |
202 // VKEY_OEM_4 is Left Brace '[{' key. | 206 // VKEY_OEM_4 is Left Brace '[{' key. |
203 { ui::VKEY_OEM_4, ui::EF_COMMAND_DOWN, IDC_BACK }, | 207 { ui::VKEY_OEM_4, ui::EF_COMMAND_DOWN, IDC_BACK }, |
204 { ui::VKEY_P, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, IDC_BASIC_PRINT }, | 208 { ui::VKEY_P, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, IDC_BASIC_PRINT }, |
205 { ui::VKEY_BACK, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, | 209 { ui::VKEY_BACK, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, |
206 IDC_CLEAR_BROWSING_DATA }, | 210 IDC_CLEAR_BROWSING_DATA }, |
207 { ui::VKEY_C, ui::EF_COMMAND_DOWN, IDC_CONTENT_CONTEXT_COPY }, | 211 { ui::VKEY_C, ui::EF_COMMAND_DOWN, IDC_CONTENT_CONTEXT_COPY }, |
208 { ui::VKEY_X, ui::EF_COMMAND_DOWN, IDC_CONTENT_CONTEXT_CUT }, | 212 { ui::VKEY_X, ui::EF_COMMAND_DOWN, IDC_CONTENT_CONTEXT_CUT }, |
209 { ui::VKEY_V, ui::EF_COMMAND_DOWN, IDC_CONTENT_CONTEXT_PASTE }, | 213 { ui::VKEY_V, ui::EF_COMMAND_DOWN, IDC_CONTENT_CONTEXT_PASTE }, |
210 { ui::VKEY_V, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, | 214 { ui::VKEY_V, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, |
211 IDC_CONTENT_CONTEXT_PASTE_AND_MATCH_STYLE }, | 215 IDC_CONTENT_CONTEXT_PASTE_AND_MATCH_STYLE }, |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
268 #endif // defined(USE_ASH) | 272 #endif // defined(USE_ASH) |
269 | 273 |
270 } // namespace | 274 } // namespace |
271 | 275 |
272 std::vector<AcceleratorMapping> GetAcceleratorList() { | 276 std::vector<AcceleratorMapping> GetAcceleratorList() { |
273 CR_DEFINE_STATIC_LOCAL(std::vector<AcceleratorMapping>, accelerators, ()); | 277 CR_DEFINE_STATIC_LOCAL(std::vector<AcceleratorMapping>, accelerators, ()); |
274 if (accelerators.empty()) { | 278 if (accelerators.empty()) { |
275 accelerators.insert(accelerators.begin(), std::begin(kAcceleratorMap), | 279 accelerators.insert(accelerators.begin(), std::begin(kAcceleratorMap), |
276 std::end(kAcceleratorMap)); | 280 std::end(kAcceleratorMap)); |
277 #if defined(OS_MACOSX) | 281 #if defined(OS_MACOSX) |
282 #if 1 | |
278 // Alt, Control, Shift without Command and accelerators without modifiers | 283 // Alt, Control, Shift without Command and accelerators without modifiers |
279 // are not very typical for native Mac apps. Simplify the kAcceleratorMap | 284 // are not very typical for native Mac apps. Simplify the kAcceleratorMap |
280 // table by filtering them out. | 285 // table by filtering them out. |
281 auto it = std::remove_if(accelerators.begin(), accelerators.end(), | 286 std::vector<AcceleratorMapping> accelerators_mblsha = accelerators; |
282 [](const AcceleratorMapping& m) { | 287 auto remove_start_mblsha = std::remove_if(accelerators_mblsha.begin(), |
288 accelerators_mblsha.end(), | |
289 [](const AcceleratorMapping& m) { | |
283 if (m.modifiers & ui::EF_COMMAND_DOWN) { | 290 if (m.modifiers & ui::EF_COMMAND_DOWN) { |
284 // Command is Mac-specific, so this accelerator should be enabled. | 291 // Command is Mac-specific, so this accelerator should be enabled. |
285 return false; | 292 return false; |
286 } | 293 } |
287 return m.modifiers == ui::EF_NONE || | 294 return m.modifiers == ui::EF_NONE || |
288 m.modifiers == ui::EF_SHIFT_DOWN || | 295 m.modifiers == ui::EF_SHIFT_DOWN || |
289 m.modifiers == (ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN) || | 296 m.modifiers == (ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN) || |
290 m.modifiers & ui::EF_ALT_DOWN || | 297 m.modifiers & ui::EF_ALT_DOWN || |
291 m.modifiers & ui::EF_CONTROL_DOWN; | 298 m.modifiers & ui::EF_CONTROL_DOWN; |
292 }); | 299 }); |
293 accelerators.erase(it, accelerators.end()); | 300 accelerators_mblsha.erase(remove_start_mblsha, accelerators_mblsha.end()); |
301 #endif | |
302 | |
303 // Alt by itself (or with just shift) is never used on Mac since it's used | |
304 // to generate non-ASCII characters. Such commands are given Mac-specific | |
305 // bindings as well, so remove the mappings with Alt, but not those with | |
306 // Command or Control. | |
307 const int kMask = | |
308 ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN; | |
309 auto remove_start = std::remove_if(accelerators.begin(), accelerators.end(), | |
310 [](const AcceleratorMapping& m) { | |
311 return (m.modifiers & kMask) == ui::EF_ALT_DOWN; | |
312 }); | |
313 | |
314 #if DCHECK_IS_ON() | |
315 // For everything being removed, ensure there's another mapping. | |
316 for (auto it = remove_start; it != accelerators.end(); ++it) { | |
317 auto found = std::find_if(accelerators.begin(), remove_start, | |
318 [&it](const AcceleratorMapping& m) { | |
319 return m.command_id == it->command_id; | |
320 }); | |
321 DCHECK(found != accelerators.end()); | |
322 } | |
323 #endif | |
324 accelerators.erase(remove_start, accelerators.end()); | |
325 | |
326 #if 1 | |
327 VLOG(1) << "accelerators"; | |
328 for (auto d : accelerators) { | |
329 VLOG(1) << d.command_id << " modifiers:" | |
330 << (d.modifiers & ui::EF_COMMAND_DOWN ? "(Cmd)" : "") | |
331 << (d.modifiers & ui::EF_CONTROL_DOWN ? "(Ctrl)" : "") | |
332 << (d.modifiers & ui::EF_ALT_DOWN ? "(Alt)" : "") | |
333 << (d.modifiers & ui::EF_SHIFT_DOWN ? "(Shift)" : "") | |
334 << "; keycode:" << d.keycode; | |
335 } | |
336 | |
337 VLOG(1) << "\n\n\naccelerators_mblsha"; | |
338 for (auto d : accelerators_mblsha) { | |
339 VLOG(1) << d.command_id << " modifiers:" | |
340 << (d.modifiers & ui::EF_COMMAND_DOWN ? "(Cmd)" : "") | |
341 << (d.modifiers & ui::EF_CONTROL_DOWN ? "(Ctrl)" : "") | |
342 << (d.modifiers & ui::EF_ALT_DOWN ? "(Alt)" : "") | |
343 << (d.modifiers & ui::EF_SHIFT_DOWN ? "(Shift)" : "") | |
344 << "; keycode:" << d.keycode; | |
345 } | |
346 #endif | |
294 #endif // OS_MACOSX | 347 #endif // OS_MACOSX |
295 } | 348 } |
296 return accelerators; | 349 return accelerators; |
297 } | 350 } |
298 | 351 |
299 bool GetAshAcceleratorForCommandId(int command_id, | 352 bool GetAshAcceleratorForCommandId(int command_id, |
300 ui::Accelerator* accelerator) { | 353 ui::Accelerator* accelerator) { |
301 #if defined(USE_ASH) | 354 #if defined(USE_ASH) |
302 for (size_t i = 0; i < kChromeCmdId2AshActionIdLength; ++i) { | 355 for (size_t i = 0; i < kChromeCmdId2AshActionIdLength; ++i) { |
303 if (command_id == kChromeCmdId2AshActionId[i].chrome_cmd_id) { | 356 if (command_id == kChromeCmdId2AshActionId[i].chrome_cmd_id) { |
(...skipping 23 matching lines...) Expand all Loading... | |
327 *accelerator = ui::Accelerator(ui::VKEY_C, kPlatformModifier); | 380 *accelerator = ui::Accelerator(ui::VKEY_C, kPlatformModifier); |
328 return true; | 381 return true; |
329 case IDC_PASTE: | 382 case IDC_PASTE: |
330 *accelerator = ui::Accelerator(ui::VKEY_V, kPlatformModifier); | 383 *accelerator = ui::Accelerator(ui::VKEY_V, kPlatformModifier); |
331 return true; | 384 return true; |
332 } | 385 } |
333 return false; | 386 return false; |
334 } | 387 } |
335 | 388 |
336 } // namespace chrome | 389 } // namespace chrome |
OLD | NEW |