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