• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 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.
53 enum 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 
149 struct AcceleratorData {
150   bool trigger_on_press;
151   ui::KeyboardCode keycode;
152   int modifiers;
153   AcceleratorAction action;
154 };
155 
156 // Accelerators handled by AcceleratorController.
157 ASH_EXPORT extern const AcceleratorData kAcceleratorData[];
158 ASH_EXPORT extern const size_t kAcceleratorDataLength;
159 
160 #if !defined(NDEBUG)
161 // Accelerators useful when running on desktop. Debug build only.
162 ASH_EXPORT extern const AcceleratorData kDesktopAcceleratorData[];
163 ASH_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.
168 ASH_EXPORT extern const AcceleratorData kDebugAcceleratorData[];
169 ASH_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.
173 ASH_EXPORT extern const AcceleratorAction kPreferredActions[];
174 ASH_EXPORT extern const size_t kPreferredActionsLength;
175 
176 // Actions that are always handled in Ash.
177 ASH_EXPORT extern const AcceleratorAction kReservedActions[];
178 ASH_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').
183 ASH_EXPORT extern const AcceleratorAction kReservedDebugActions[];
184 ASH_EXPORT extern const size_t kReservedDebugActionsLength;
185 
186 // Actions allowed while user is not signed in or screen is locked.
187 ASH_EXPORT extern const AcceleratorAction kActionsAllowedAtLoginOrLockScreen[];
188 ASH_EXPORT extern const size_t kActionsAllowedAtLoginOrLockScreenLength;
189 
190 // Actions allowed while screen is locked (in addition to
191 // kActionsAllowedAtLoginOrLockScreen).
192 ASH_EXPORT extern const AcceleratorAction kActionsAllowedAtLockScreen[];
193 ASH_EXPORT extern const size_t kActionsAllowedAtLockScreenLength;
194 
195 // Actions allowed while a modal window is up.
196 ASH_EXPORT extern const AcceleratorAction kActionsAllowedAtModalWindow[];
197 ASH_EXPORT extern const size_t kActionsAllowedAtModalWindowLength;
198 
199 // Actions which will not be repeated while holding an accelerator key.
200 ASH_EXPORT extern const AcceleratorAction kNonrepeatableActions[];
201 ASH_EXPORT extern const size_t kNonrepeatableActionsLength;
202 
203 // Actions allowed in app mode.
204 ASH_EXPORT extern const AcceleratorAction kActionsAllowedInAppMode[];
205 ASH_EXPORT extern const size_t kActionsAllowedInAppModeLength;
206 
207 // Actions that require at least 1 window.
208 ASH_EXPORT extern const AcceleratorAction kActionsNeedingWindow[];
209 ASH_EXPORT extern const size_t kActionsNeedingWindowLength;
210 
211 }  // namespace ash
212 
213 #endif  // ASH_ACCELERATORS_ACCELERATOR_TABLE_H_
214