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.
5 #ifndef ASH_ACCELERATORS_ACCELERATOR_TABLE_H_
6 #define ASH_ACCELERATORS_ACCELERATOR_TABLE_H_
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"
15 // There are five classes of accelerators in Ash:
18 // * Neither packaged apps nor web pages can cancel.
19 // * For example, power button.
20 // * See kReservedActions below.
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.
27 // Chrome OS system keys:
28 // * For legacy reasons, v1 apps can process and cancel. Otherwise handled
30 // * Brightness, volume control, etc.
31 // * See IsSystemKey() in ash/accelerators/accelerator_filter.cc.
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.
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.
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.
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.
51 // Please put if/def sections at the end of the bare section and keep the list
52 // within each section in alphabetical order.
53 enum AcceleratorAction
{
56 DEBUG_PRINT_LAYER_HIERARCHY
,
57 DEBUG_PRINT_VIEW_HIERARCHY
,
58 DEBUG_PRINT_WINDOW_HIERARCHY
,
59 DEBUG_TOGGLE_ROOT_WINDOW_FULL_SCREEN
,
60 DEBUG_TOGGLE_DESKTOP_BACKGROUND_MODE
,
61 DEBUG_TOGGLE_DEVICE_SCALE_FACTOR
,
62 DEBUG_TOGGLE_SHOW_DEBUG_BORDERS
,
63 DEBUG_TOGGLE_SHOW_FPS_COUNTER
,
64 DEBUG_TOGGLE_SHOW_PAINT_RECTS
,
78 MAGNIFY_SCREEN_ZOOM_IN
,
79 MAGNIFY_SCREEN_ZOOM_OUT
,
96 SHOW_KEYBOARD_OVERLAY
,
97 SHOW_MESSAGE_CENTER_BUBBLE
,
98 SHOW_SYSTEM_TRAY_BUBBLE
,
100 SWITCH_IME
, // Switch to another IME depending on the accelerator.
101 TAKE_PARTIAL_SCREENSHOT
,
108 WINDOW_POSITION_CENTER
,
109 WINDOW_CYCLE_SNAP_DOCK_LEFT
,
110 WINDOW_CYCLE_SNAP_DOCK_RIGHT
,
111 #if defined(OS_CHROMEOS)
114 DEBUG_ADD_REMOVE_DISPLAY
,
115 DEBUG_TOGGLE_UNIFIED_DESKTOP
,
117 DISABLE_GPU_WATCHDOG
,
118 KEYBOARD_BRIGHTNESS_DOWN
,
119 KEYBOARD_BRIGHTNESS_UP
,
128 SILENCE_SPOKEN_FEEDBACK
,
129 SWAP_PRIMARY_DISPLAY
,
131 SWITCH_TO_PREVIOUS_USER
,
134 TOGGLE_SPOKEN_FEEDBACK
,
135 TOGGLE_TOUCH_VIEW_TESTING
,
138 TOUCH_HUD_MODE_CHANGE
,
139 TOUCH_HUD_PROJECTION_TOGGLE
,
148 struct AcceleratorData
{
149 bool trigger_on_press
;
150 ui::KeyboardCode keycode
;
152 AcceleratorAction action
;
155 // Gathers the needed data to handle deprecated accelerators.
156 struct DeprecatedAcceleratorData
{
157 // The old deprecated accelerator.
158 AcceleratorData deprecated_accelerator
;
160 // The name of the UMA histogram that will be used to measure the deprecated
161 // v.s. new accelerator usage.
162 const char* uma_histogram_name
;
164 // The ID of the localized notification message to show to users informing
165 // them about the deprecation.
166 int notification_message_id
;
168 // Specifies whether the deprecated accelerator is still enabled to do its
169 // associated action.
170 bool deprecated_enabled
;
173 // This will be used for the UMA stats to measure the how many users are using
174 // the old v.s. new accelerators.
175 enum DeprecatedAcceleratorUsage
{
176 DEPRECATED_USED
= 0, // The deprecated accelerator is used.
177 NEW_USED
, // The new accelerator is used.
178 DEPRECATED_USAGE_COUNT
, // Maximum value of this enum for histogram use.
181 // Accelerators handled by AcceleratorController.
182 ASH_EXPORT
extern const AcceleratorData kAcceleratorData
[];
183 ASH_EXPORT
extern const size_t kAcceleratorDataLength
;
185 #if defined(OS_CHROMEOS)
186 // The list of the deprecated accelerators along with their new replacing ones
187 // and how to handle them.
188 ASH_EXPORT
extern const DeprecatedAcceleratorData kDeprecatedAccelerators
[];
189 ASH_EXPORT
extern const size_t kDeprecatedAcceleratorsLength
;
190 #endif // defined(OS_CHROMEOS)
192 // Debug accelerators. Debug accelerators are only enabled when the "Debugging
193 // keyboard shortcuts" flag (--ash-debug-shortcuts) is enabled. Debug actions
194 // are always run (similar to reserved actions).
195 ASH_EXPORT
extern const AcceleratorData kDebugAcceleratorData
[];
196 ASH_EXPORT
extern const size_t kDebugAcceleratorDataLength
;
198 // Actions that should be handled very early in Ash unless the current target
199 // window is full-screen.
200 ASH_EXPORT
extern const AcceleratorAction kPreferredActions
[];
201 ASH_EXPORT
extern const size_t kPreferredActionsLength
;
203 // Actions that are always handled in Ash.
204 ASH_EXPORT
extern const AcceleratorAction kReservedActions
[];
205 ASH_EXPORT
extern const size_t kReservedActionsLength
;
207 // Actions allowed while user is not signed in or screen is locked.
208 ASH_EXPORT
extern const AcceleratorAction kActionsAllowedAtLoginOrLockScreen
[];
209 ASH_EXPORT
extern const size_t kActionsAllowedAtLoginOrLockScreenLength
;
211 // Actions allowed while screen is locked (in addition to
212 // kActionsAllowedAtLoginOrLockScreen).
213 ASH_EXPORT
extern const AcceleratorAction kActionsAllowedAtLockScreen
[];
214 ASH_EXPORT
extern const size_t kActionsAllowedAtLockScreenLength
;
216 // Actions allowed while a modal window is up.
217 ASH_EXPORT
extern const AcceleratorAction kActionsAllowedAtModalWindow
[];
218 ASH_EXPORT
extern const size_t kActionsAllowedAtModalWindowLength
;
220 // Actions which will not be repeated while holding an accelerator key.
221 ASH_EXPORT
extern const AcceleratorAction kNonrepeatableActions
[];
222 ASH_EXPORT
extern const size_t kNonrepeatableActionsLength
;
224 // Actions allowed in app mode.
225 ASH_EXPORT
extern const AcceleratorAction kActionsAllowedInAppMode
[];
226 ASH_EXPORT
extern const size_t kActionsAllowedInAppModeLength
;
228 // Actions that require at least 1 window.
229 ASH_EXPORT
extern const AcceleratorAction kActionsNeedingWindow
[];
230 ASH_EXPORT
extern const size_t kActionsNeedingWindowLength
;
234 #endif // ASH_ACCELERATORS_ACCELERATOR_TABLE_H_