15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/views/accelerator_table.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/app/chrome_command_ids.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/base/accelerators/accelerator.h" 10d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/event_constants.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(USE_ASH) 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/accelerators/accelerator_table.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chrome { 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// NOTE: Keep this list in the same (mostly-alphabetical) order as 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the Windows accelerators in ../../app/chrome_dll.rc. 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Do not use Ctrl-Alt as a shortcut modifier, as it is used by i18n keyboards: 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://blogs.msdn.com/b/oldnewthing/archive/2004/03/29/101121.aspx 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const AcceleratorMapping kAcceleratorMap[] = { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_LEFT, ui::EF_ALT_DOWN, IDC_BACK }, 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_BACK, ui::EF_NONE, IDC_BACK }, 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_D, ui::EF_CONTROL_DOWN, IDC_BOOKMARK_PAGE }, 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_D, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDC_BOOKMARK_ALL_TABS }, 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_W, ui::EF_CONTROL_DOWN, IDC_CLOSE_TAB }, 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_W, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, IDC_CLOSE_WINDOW }, 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_F, ui::EF_CONTROL_DOWN, IDC_FIND }, 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_G, ui::EF_CONTROL_DOWN, IDC_FIND_NEXT }, 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_G, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, IDC_FIND_PREVIOUS }, 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_D, ui::EF_ALT_DOWN, IDC_FOCUS_LOCATION }, 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_L, ui::EF_CONTROL_DOWN, IDC_FOCUS_LOCATION }, 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_K, ui::EF_CONTROL_DOWN, IDC_FOCUS_SEARCH }, 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_E, ui::EF_CONTROL_DOWN, IDC_FOCUS_SEARCH }, 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_T, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, IDC_FOCUS_TOOLBAR }, 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, IDC_FOCUS_BOOKMARKS }, 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { ui::VKEY_A, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, IDC_FOCUS_INFOBARS }, 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_RIGHT, ui::EF_ALT_DOWN, IDC_FORWARD }, 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_BACK, ui::EF_SHIFT_DOWN, IDC_FORWARD }, 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_I, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, IDC_DEV_TOOLS }, 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_F12, ui::EF_NONE, IDC_DEV_TOOLS_TOGGLE }, 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_J, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDC_DEV_TOOLS_CONSOLE }, 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_C, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDC_DEV_TOOLS_INSPECT }, 494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) { ui::VKEY_O, ui::EF_CONTROL_DOWN, IDC_OPEN_FILE }, 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_P, ui::EF_CONTROL_DOWN, IDC_PRINT}, 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_P, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, IDC_ADVANCED_PRINT}, 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_R, ui::EF_CONTROL_DOWN, IDC_RELOAD }, 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_R, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDC_RELOAD_IGNORING_CACHE }, 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_HOME, ui::EF_ALT_DOWN, IDC_HOME }, 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_S, ui::EF_CONTROL_DOWN, IDC_SAVE_PAGE }, 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_9, ui::EF_CONTROL_DOWN, IDC_SELECT_LAST_TAB }, 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_NUMPAD9, ui::EF_CONTROL_DOWN, IDC_SELECT_LAST_TAB }, 59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if defined(OS_LINUX) && !defined(OS_CHROMEOS) 60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { ui::VKEY_9, ui::EF_ALT_DOWN, IDC_SELECT_LAST_TAB }, 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { ui::VKEY_NUMPAD9, ui::EF_ALT_DOWN, IDC_SELECT_LAST_TAB }, 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { ui::VKEY_NEXT, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, IDC_MOVE_TAB_NEXT }, 63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { ui::VKEY_PRIOR, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, 64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) IDC_MOVE_TAB_PREVIOUS }, 65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_TAB, ui::EF_CONTROL_DOWN, IDC_SELECT_NEXT_TAB }, 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_NEXT, ui::EF_CONTROL_DOWN, IDC_SELECT_NEXT_TAB }, 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_TAB, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDC_SELECT_PREVIOUS_TAB }, 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_PRIOR, ui::EF_CONTROL_DOWN, IDC_SELECT_PREVIOUS_TAB }, 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_1, ui::EF_CONTROL_DOWN, IDC_SELECT_TAB_0 }, 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_NUMPAD1, ui::EF_CONTROL_DOWN, IDC_SELECT_TAB_0 }, 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_2, ui::EF_CONTROL_DOWN, IDC_SELECT_TAB_1 }, 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_NUMPAD2, ui::EF_CONTROL_DOWN, IDC_SELECT_TAB_1 }, 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_3, ui::EF_CONTROL_DOWN, IDC_SELECT_TAB_2 }, 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_NUMPAD3, ui::EF_CONTROL_DOWN, IDC_SELECT_TAB_2 }, 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_4, ui::EF_CONTROL_DOWN, IDC_SELECT_TAB_3 }, 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_NUMPAD4, ui::EF_CONTROL_DOWN, IDC_SELECT_TAB_3 }, 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_5, ui::EF_CONTROL_DOWN, IDC_SELECT_TAB_4 }, 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_NUMPAD5, ui::EF_CONTROL_DOWN, IDC_SELECT_TAB_4 }, 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_6, ui::EF_CONTROL_DOWN, IDC_SELECT_TAB_5 }, 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_NUMPAD6, ui::EF_CONTROL_DOWN, IDC_SELECT_TAB_5 }, 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_7, ui::EF_CONTROL_DOWN, IDC_SELECT_TAB_6 }, 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_NUMPAD7, ui::EF_CONTROL_DOWN, IDC_SELECT_TAB_6 }, 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_8, ui::EF_CONTROL_DOWN, IDC_SELECT_TAB_7 }, 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_NUMPAD8, ui::EF_CONTROL_DOWN, IDC_SELECT_TAB_7 }, 87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if defined(OS_LINUX) && !defined(OS_CHROMEOS) 88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { ui::VKEY_1, ui::EF_ALT_DOWN, IDC_SELECT_TAB_0 }, 89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { ui::VKEY_NUMPAD1, ui::EF_ALT_DOWN, IDC_SELECT_TAB_0 }, 90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { ui::VKEY_2, ui::EF_ALT_DOWN, IDC_SELECT_TAB_1 }, 91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { ui::VKEY_NUMPAD2, ui::EF_ALT_DOWN, IDC_SELECT_TAB_1 }, 92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { ui::VKEY_3, ui::EF_ALT_DOWN, IDC_SELECT_TAB_2 }, 93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { ui::VKEY_NUMPAD3, ui::EF_ALT_DOWN, IDC_SELECT_TAB_2 }, 94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { ui::VKEY_4, ui::EF_ALT_DOWN, IDC_SELECT_TAB_3 }, 95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { ui::VKEY_NUMPAD4, ui::EF_ALT_DOWN, IDC_SELECT_TAB_3 }, 96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { ui::VKEY_5, ui::EF_ALT_DOWN, IDC_SELECT_TAB_4 }, 97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { ui::VKEY_NUMPAD5, ui::EF_ALT_DOWN, IDC_SELECT_TAB_4 }, 98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { ui::VKEY_6, ui::EF_ALT_DOWN, IDC_SELECT_TAB_5 }, 99f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { ui::VKEY_NUMPAD6, ui::EF_ALT_DOWN, IDC_SELECT_TAB_5 }, 100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { ui::VKEY_7, ui::EF_ALT_DOWN, IDC_SELECT_TAB_6 }, 101f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { ui::VKEY_NUMPAD7, ui::EF_ALT_DOWN, IDC_SELECT_TAB_6 }, 102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { ui::VKEY_8, ui::EF_ALT_DOWN, IDC_SELECT_TAB_7 }, 103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { ui::VKEY_NUMPAD8, ui::EF_ALT_DOWN, IDC_SELECT_TAB_7 }, 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) { ui::VKEY_BROWSER_FAVORITES, ui::EF_NONE, IDC_SHOW_BOOKMARK_BAR }, 105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDC_SHOW_BOOKMARK_BAR }, 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_O, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDC_SHOW_BOOKMARK_MANAGER }, 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_J, ui::EF_CONTROL_DOWN, IDC_SHOW_DOWNLOADS }, 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_H, ui::EF_CONTROL_DOWN, IDC_SHOW_HISTORY }, 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_F, ui::EF_ALT_DOWN, IDC_SHOW_APP_MENU}, 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_E, ui::EF_ALT_DOWN, IDC_SHOW_APP_MENU}, 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_ESCAPE, ui::EF_NONE, IDC_STOP }, 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_OEM_PERIOD, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDC_TOGGLE_SPEECH_INPUT }, 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_U, ui::EF_CONTROL_DOWN, IDC_VIEW_SOURCE }, 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_OEM_MINUS, ui::EF_CONTROL_DOWN, IDC_ZOOM_MINUS }, 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_SUBTRACT, ui::EF_CONTROL_DOWN, IDC_ZOOM_MINUS }, 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_0, ui::EF_CONTROL_DOWN, IDC_ZOOM_NORMAL }, 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_NUMPAD0, ui::EF_CONTROL_DOWN, IDC_ZOOM_NORMAL }, 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_OEM_PLUS, ui::EF_CONTROL_DOWN, IDC_ZOOM_PLUS }, 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_ADD, ui::EF_CONTROL_DOWN, IDC_ZOOM_PLUS }, 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F1, ui::EF_NONE, IDC_HELP_PAGE_VIA_KEYBOARD }, 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F3, ui::EF_NONE, IDC_FIND_NEXT }, 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F3, ui::EF_SHIFT_DOWN, IDC_FIND_PREVIOUS }, 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F4, ui::EF_CONTROL_DOWN, IDC_CLOSE_TAB }, 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F4, ui::EF_ALT_DOWN, IDC_CLOSE_WINDOW }, 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F5, ui::EF_NONE, IDC_RELOAD }, 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F5, ui::EF_CONTROL_DOWN, IDC_RELOAD_IGNORING_CACHE }, 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F5, ui::EF_SHIFT_DOWN, IDC_RELOAD_IGNORING_CACHE }, 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F6, ui::EF_NONE, IDC_FOCUS_NEXT_PANE }, 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F6, ui::EF_SHIFT_DOWN, IDC_FOCUS_PREVIOUS_PANE }, 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F10, ui::EF_NONE, IDC_FOCUS_MENU_BAR }, 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ui::VKEY_F11, ui::EF_NONE, IDC_FULLSCREEN }, 136cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) { ui::VKEY_ESCAPE, ui::EF_SHIFT_DOWN, IDC_TASK_MANAGER }, 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Platform-specific key maps. 1395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(OS_LINUX) 1405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) { ui::VKEY_BROWSER_BACK, ui::EF_NONE, IDC_BACK }, 1415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) { ui::VKEY_BROWSER_FORWARD, ui::EF_NONE, IDC_FORWARD }, 1425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) { ui::VKEY_BROWSER_HOME, ui::EF_NONE, IDC_HOME }, 1435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) { ui::VKEY_BROWSER_REFRESH, ui::EF_NONE, IDC_RELOAD }, 1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) { ui::VKEY_BROWSER_REFRESH, ui::EF_CONTROL_DOWN, IDC_RELOAD_IGNORING_CACHE }, 1455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) { ui::VKEY_BROWSER_REFRESH, ui::EF_SHIFT_DOWN, IDC_RELOAD_IGNORING_CACHE }, 1465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif // defined(OS_LINUX) 1475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // On Chrome OS, VKEY_BROWSER_SEARCH is handled in Ash. 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_BACK, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDC_CLEAR_BROWSING_DATA }, 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_OEM_2, ui::EF_CONTROL_DOWN, IDC_HELP_PAGE_VIA_KEYBOARD }, 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_OEM_2, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDC_HELP_PAGE_VIA_KEYBOARD }, 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_BROWSER_FAVORITES, ui::EF_NONE, IDC_SHOW_BOOKMARK_MANAGER }, 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_BROWSER_STOP, ui::EF_NONE, IDC_STOP }, 15758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Not implemented inside Ash to allow web pages to capture the key. 15858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) { ui::VKEY_M, ui::EF_CONTROL_DOWN, IDC_MINIMIZE_WINDOW }, 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else // OS_CHROMEOS 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_DELETE, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDC_CLEAR_BROWSING_DATA }, 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_LMENU, ui::EF_NONE, IDC_FOCUS_MENU_BAR }, 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_MENU, ui::EF_NONE, IDC_FOCUS_MENU_BAR }, 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_RMENU, ui::EF_NONE, IDC_FOCUS_MENU_BAR }, 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // On Windows, all VKEY_BROWSER_* keys except VKEY_BROWSER_SEARCH are handled 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // via WM_APPCOMMAND. 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_BROWSER_SEARCH, ui::EF_NONE, IDC_FOCUS_SEARCH }, 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_M, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, IDC_SHOW_AVATAR_MENU}, 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // On ChromeOS, these keys are assigned to change UI scale. 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { ui::VKEY_OEM_PLUS, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, IDC_ZOOM_PLUS }, 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { ui::VKEY_OEM_MINUS, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDC_ZOOM_MINUS }, 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // For each entry here add an entry into kChromeCmdId2AshActionId below 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // if Ash has a corresponding accelerator. 17558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(GOOGLE_CHROME_BUILD) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_I, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, IDC_FEEDBACK }, 17758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_Q, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, IDC_EXIT }, 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_N, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDC_NEW_INCOGNITO_WINDOW }, 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_T, ui::EF_CONTROL_DOWN, IDC_NEW_TAB }, 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_N, ui::EF_CONTROL_DOWN, IDC_NEW_WINDOW }, 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ui::VKEY_T, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, IDC_RESTORE_TAB }, 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const size_t kAcceleratorMapLength = arraysize(kAcceleratorMap); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(USE_ASH) 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Below we map Chrome command ids to Ash action ids for commands that have 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// an shortcut that is handled by Ash (instead of Chrome). Adding entries 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// here will show shortcut text on menus. See comment above. 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct ChromeCmdId2AshActionId { 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const int chrome_cmd_id; 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ash::AcceleratorAction ash_action_id; 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const ChromeCmdId2AshActionId kChromeCmdId2AshActionId[] = { 19758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(GOOGLE_CHROME_BUILD) 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { IDC_FEEDBACK, ash::OPEN_FEEDBACK_PAGE }, 19958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { IDC_EXIT, ash::EXIT }, 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { IDC_NEW_INCOGNITO_WINDOW, ash::NEW_INCOGNITO_WINDOW }, 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { IDC_NEW_TAB, ash::NEW_TAB }, 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { IDC_NEW_WINDOW, ash::NEW_WINDOW }, 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { IDC_RESTORE_TAB, ash::RESTORE_TAB }, 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { IDC_TASK_MANAGER, ash::SHOW_TASK_MANAGER }, 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const size_t kChromeCmdId2AshActionIdLength = 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) arraysize(kChromeCmdId2AshActionId); 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // defined(USE_ASH) 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)std::vector<AcceleratorMapping> GetAcceleratorList() { 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return std::vector<AcceleratorMapping>( 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kAcceleratorMap, kAcceleratorMap + kAcceleratorMapLength); 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool GetAshAcceleratorForCommandId(int command_id, 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HostDesktopType host_desktop_type, 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::Accelerator* accelerator) { 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(USE_ASH) 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (host_desktop_type != chrome::HOST_DESKTOP_TYPE_ASH) 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < kChromeCmdId2AshActionIdLength; ++i) { 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (command_id == kChromeCmdId2AshActionId[i].chrome_cmd_id) { 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t j = 0; j < ash::kAcceleratorDataLength; ++j) { 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (kChromeCmdId2AshActionId[i].ash_action_id == 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ash::kAcceleratorData[j].action) { 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *accelerator = ui::Accelerator(ash::kAcceleratorData[j].keycode, 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ash::kAcceleratorData[j].modifiers); 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // defined(USE_ASH) 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool GetStandardAcceleratorForCommandId(int command_id, 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::Accelerator* accelerator) { 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The standard Ctrl-X, Ctrl-V and Ctrl-C are not defined as accelerators 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // anywhere else. 2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switch (command_id) { 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case IDC_CUT: 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *accelerator = ui::Accelerator(ui::VKEY_X, ui::EF_CONTROL_DOWN); 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case IDC_COPY: 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *accelerator = ui::Accelerator(ui::VKEY_C, ui::EF_CONTROL_DOWN); 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case IDC_PASTE: 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *accelerator = ui::Accelerator(ui::VKEY_V, ui::EF_CONTROL_DOWN); 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chrome 259