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 3// found in the LICENSE file. 4 5#ifndef ASH_ACCELERATORS_ACCELERATOR_TABLE_H_ 6#define ASH_ACCELERATORS_ACCELERATOR_TABLE_H_ 7 8#include "ash/ash_export.h" 9#include "base/basictypes.h" 10#include "ui/events/event_constants.h" 11#include "ui/events/keycodes/keyboard_codes.h" 12 13namespace ash { 14 15// There are five classes of accelerators in Ash: 16// 17// Ash (OS) reserved: 18// * Neither packaged apps nor web pages can cancel. 19// * For example, power button. 20// * See kReservedActions below. 21// 22// Ash (OS) preferred: 23// * Fullscreen window can consume, but normal window can't. 24// * For example, Alt-Tab window cycling. 25// * See kPreferredActions below. 26// 27// Chrome OS system keys: 28// * For legacy reasons, v1 apps can process and cancel. Otherwise handled 29// directly by Ash. 30// * Brightness, volume control, etc. 31// * See IsSystemKey() in ash/accelerators/accelerator_filter.cc. 32// 33// Browser reserved: 34// * Packaged apps can cancel but web pages cannot. 35// * For example, browser back and forward from first-row function keys. 36// * See IsReservedCommandOrKey() in 37// chrome/browser/ui/browser_command_controller.cc. 38// 39// Browser non-reserved: 40// * Both packaged apps and web pages can cancel. 41// * For example, selecting tabs by number with Ctrl-1 to Ctrl-9. 42// * See kAcceleratorMap in chrome/browser/ui/views/accelerator_table.cc. 43// 44// In particular, there is not an accelerator processing pass for Ash after 45// the browser gets the accelerator. See crbug.com/285308 for details. 46// 47// There are also various restrictions on accelerators allowed at the login 48// screen, when running in "forced app mode" (like a kiosk), etc. See the 49// various kActionsAllowed* below. 50// 51// Please put if/def sections at the end of the bare section and keep the list 52// within each section in alphabetical order. 53enum AcceleratorAction { 54 ACCESSIBLE_FOCUS_NEXT, 55 ACCESSIBLE_FOCUS_PREVIOUS, 56 BRIGHTNESS_DOWN, 57 BRIGHTNESS_UP, 58 CYCLE_BACKWARD_MRU, 59 CYCLE_FORWARD_MRU, 60 DEBUG_TOGGLE_DEVICE_SCALE_FACTOR, 61 DEBUG_TOGGLE_SHOW_DEBUG_BORDERS, 62 DEBUG_TOGGLE_SHOW_FPS_COUNTER, 63 DEBUG_TOGGLE_SHOW_PAINT_RECTS, 64 DISABLE_CAPS_LOCK, 65 EXIT, 66 FOCUS_NEXT_PANE, 67 FOCUS_PREVIOUS_PANE, 68 FOCUS_SHELF, 69 KEYBOARD_BRIGHTNESS_DOWN, 70 KEYBOARD_BRIGHTNESS_UP, 71 LAUNCH_APP_0, 72 LAUNCH_APP_1, 73 LAUNCH_APP_2, 74 LAUNCH_APP_3, 75 LAUNCH_APP_4, 76 LAUNCH_APP_5, 77 LAUNCH_APP_6, 78 LAUNCH_APP_7, 79 LAUNCH_LAST_APP, 80 LOCK_PRESSED, 81 LOCK_RELEASED, 82 MAGNIFY_SCREEN_ZOOM_IN, 83 MAGNIFY_SCREEN_ZOOM_OUT, 84 MEDIA_NEXT_TRACK, 85 MEDIA_PLAY_PAUSE, 86 MEDIA_PREV_TRACK, 87 NEW_INCOGNITO_WINDOW, 88 NEW_TAB, 89 NEW_WINDOW, 90 NEXT_IME, 91 OPEN_FEEDBACK_PAGE, 92 POWER_PRESSED, 93 POWER_RELEASED, 94 PREVIOUS_IME, 95 PRINT_LAYER_HIERARCHY, 96 PRINT_UI_HIERARCHIES, 97 PRINT_VIEW_HIERARCHY, 98 PRINT_WINDOW_HIERARCHY, 99 RESTORE_TAB, 100 ROTATE_SCREEN, 101 ROTATE_WINDOW, 102 SCALE_UI_DOWN, 103 SCALE_UI_RESET, 104 SCALE_UI_UP, 105 SHOW_KEYBOARD_OVERLAY, 106 SHOW_MESSAGE_CENTER_BUBBLE, 107 SHOW_SYSTEM_TRAY_BUBBLE, 108 SHOW_TASK_MANAGER, 109 SILENCE_SPOKEN_FEEDBACK, 110 SWAP_PRIMARY_DISPLAY, 111 SWITCH_IME, // Switch to another IME depending on the accelerator. 112 TAKE_PARTIAL_SCREENSHOT, 113 TAKE_SCREENSHOT, 114 TOGGLE_APP_LIST, 115 TOGGLE_CAPS_LOCK, 116 TOGGLE_CAPS_LOCK_BY_ALT_LWIN, 117 TOGGLE_DESKTOP_BACKGROUND_MODE, 118 TOGGLE_FULLSCREEN, 119 TOGGLE_MAXIMIZED, 120 TOGGLE_OVERVIEW, 121 TOGGLE_ROOT_WINDOW_FULL_SCREEN, 122 TOGGLE_SPOKEN_FEEDBACK, 123 TOGGLE_TOUCH_VIEW_TESTING, 124 TOGGLE_WIFI, 125 TOUCH_HUD_CLEAR, 126 TOUCH_HUD_MODE_CHANGE, 127 TOUCH_HUD_PROJECTION_TOGGLE, 128 VOLUME_DOWN, 129 VOLUME_MUTE, 130 VOLUME_UP, 131 WINDOW_MINIMIZE, 132 WINDOW_POSITION_CENTER, 133 WINDOW_SNAP_LEFT, 134 WINDOW_SNAP_RIGHT, 135#if defined(OS_CHROMEOS) 136 ADD_REMOVE_DISPLAY, 137 TOGGLE_MIRROR_MODE, 138 DISABLE_GPU_WATCHDOG, 139 LOCK_SCREEN, 140 OPEN_CROSH, 141 OPEN_FILE_MANAGER, 142 SWITCH_TO_NEXT_USER, 143 SWITCH_TO_PREVIOUS_USER, 144#else 145 DUMMY_FOR_RESERVED, 146#endif 147}; 148 149struct AcceleratorData { 150 bool trigger_on_press; 151 ui::KeyboardCode keycode; 152 int modifiers; 153 AcceleratorAction action; 154}; 155 156// Accelerators handled by AcceleratorController. 157ASH_EXPORT extern const AcceleratorData kAcceleratorData[]; 158ASH_EXPORT extern const size_t kAcceleratorDataLength; 159 160#if !defined(NDEBUG) 161// Accelerators useful when running on desktop. Debug build only. 162ASH_EXPORT extern const AcceleratorData kDesktopAcceleratorData[]; 163ASH_EXPORT extern const size_t kDesktopAcceleratorDataLength; 164#endif 165 166// Debug accelerators enabled only when "Debugging keyboard shortcuts" flag 167// (--ash-debug-shortcuts) is enabled. 168ASH_EXPORT extern const AcceleratorData kDebugAcceleratorData[]; 169ASH_EXPORT extern const size_t kDebugAcceleratorDataLength; 170 171// Actions that should be handled very early in Ash unless the current target 172// window is full-screen. 173ASH_EXPORT extern const AcceleratorAction kPreferredActions[]; 174ASH_EXPORT extern const size_t kPreferredActionsLength; 175 176// Actions that are always handled in Ash. 177ASH_EXPORT extern const AcceleratorAction kReservedActions[]; 178ASH_EXPORT extern const size_t kReservedActionsLength; 179 180// Actions that should be handled very early in Ash unless the current target 181// window is full-screen, these actions are only handled if 182// DebugShortcutsEnabled is true (command line switch 'ash-debug-shortcuts'). 183ASH_EXPORT extern const AcceleratorAction kReservedDebugActions[]; 184ASH_EXPORT extern const size_t kReservedDebugActionsLength; 185 186// Actions allowed while user is not signed in or screen is locked. 187ASH_EXPORT extern const AcceleratorAction kActionsAllowedAtLoginOrLockScreen[]; 188ASH_EXPORT extern const size_t kActionsAllowedAtLoginOrLockScreenLength; 189 190// Actions allowed while screen is locked (in addition to 191// kActionsAllowedAtLoginOrLockScreen). 192ASH_EXPORT extern const AcceleratorAction kActionsAllowedAtLockScreen[]; 193ASH_EXPORT extern const size_t kActionsAllowedAtLockScreenLength; 194 195// Actions allowed while a modal window is up. 196ASH_EXPORT extern const AcceleratorAction kActionsAllowedAtModalWindow[]; 197ASH_EXPORT extern const size_t kActionsAllowedAtModalWindowLength; 198 199// Actions which will not be repeated while holding an accelerator key. 200ASH_EXPORT extern const AcceleratorAction kNonrepeatableActions[]; 201ASH_EXPORT extern const size_t kNonrepeatableActionsLength; 202 203// Actions allowed in app mode. 204ASH_EXPORT extern const AcceleratorAction kActionsAllowedInAppMode[]; 205ASH_EXPORT extern const size_t kActionsAllowedInAppModeLength; 206 207// Actions that require at least 1 window. 208ASH_EXPORT extern const AcceleratorAction kActionsNeedingWindow[]; 209ASH_EXPORT extern const size_t kActionsNeedingWindowLength; 210 211} // namespace ash 212 213#endif // ASH_ACCELERATORS_ACCELERATOR_TABLE_H_ 214