• 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 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