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