OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ash/accelerators/accelerator_controller.h" | 5 #include "ash/accelerators/accelerator_controller.h" |
6 | 6 |
7 #include <algorithm> | |
8 #include <cmath> | |
9 #include <string> | |
10 #include <utility> | |
11 | |
12 #include "ash/accelerators/accelerator_commands.h" | 7 #include "ash/accelerators/accelerator_commands.h" |
| 8 #include "ash/accelerators/accelerator_controller_delegate.h" |
13 #include "ash/accelerators/debug_commands.h" | 9 #include "ash/accelerators/debug_commands.h" |
14 #include "ash/common/accessibility_delegate.h" | 10 #include "ash/common/accessibility_delegate.h" |
15 #include "ash/common/accessibility_types.h" | 11 #include "ash/common/accessibility_types.h" |
16 #include "ash/common/ash_switches.h" | |
17 #include "ash/common/focus_cycler.h" | 12 #include "ash/common/focus_cycler.h" |
18 #include "ash/common/gpu_support.h" | |
19 #include "ash/common/media_delegate.h" | 13 #include "ash/common/media_delegate.h" |
20 #include "ash/common/multi_profile_uma.h" | 14 #include "ash/common/multi_profile_uma.h" |
21 #include "ash/common/session/session_state_delegate.h" | 15 #include "ash/common/session/session_state_delegate.h" |
22 #include "ash/common/shelf/shelf_model.h" | |
23 #include "ash/common/shell_delegate.h" | 16 #include "ash/common/shell_delegate.h" |
24 #include "ash/common/shell_window_ids.h" | |
25 #include "ash/common/system/brightness_control_delegate.h" | 17 #include "ash/common/system/brightness_control_delegate.h" |
26 #include "ash/common/system/keyboard_brightness_control_delegate.h" | 18 #include "ash/common/system/keyboard_brightness_control_delegate.h" |
27 #include "ash/common/system/status_area_widget.h" | |
28 #include "ash/common/system/system_notifier.h" | |
29 #include "ash/common/system/tray/system_tray.h" | |
30 #include "ash/common/system/tray/system_tray_delegate.h" | 19 #include "ash/common/system/tray/system_tray_delegate.h" |
31 #include "ash/common/system/tray/system_tray_notifier.h" | 20 #include "ash/common/system/tray/system_tray_notifier.h" |
32 #include "ash/common/system/volume_control_delegate.h" | 21 #include "ash/common/system/volume_control_delegate.h" |
33 #include "ash/common/system/web_notification/web_notification_tray.h" | |
34 #include "ash/common/wm/maximize_mode/maximize_mode_controller.h" | |
35 #include "ash/common/wm/mru_window_tracker.h" | 22 #include "ash/common/wm/mru_window_tracker.h" |
36 #include "ash/common/wm/overview/window_selector_controller.h" | 23 #include "ash/common/wm/overview/window_selector_controller.h" |
37 #include "ash/common/wm/window_cycle_controller.h" | 24 #include "ash/common/wm/window_cycle_controller.h" |
| 25 #include "ash/common/wm/window_positioning_utils.h" |
38 #include "ash/common/wm/window_state.h" | 26 #include "ash/common/wm/window_state.h" |
39 #include "ash/common/wm/wm_event.h" | 27 #include "ash/common/wm/wm_event.h" |
40 #include "ash/common/wm_shell.h" | 28 #include "ash/common/wm_shell.h" |
41 #include "ash/debug.h" | 29 #include "ash/common/wm_window.h" |
42 #include "ash/display/window_tree_host_manager.h" | |
43 #include "ash/ime_control_delegate.h" | 30 #include "ash/ime_control_delegate.h" |
44 #include "ash/magnifier/magnification_controller.h" | |
45 #include "ash/magnifier/partial_magnification_controller.h" | |
46 #include "ash/new_window_delegate.h" | |
47 #include "ash/root_window_controller.h" | |
48 #include "ash/rotator/screen_rotation_animator.h" | |
49 #include "ash/rotator/window_rotation.h" | |
50 #include "ash/screen_util.h" | |
51 #include "ash/screenshot_delegate.h" | |
52 #include "ash/shelf/shelf.h" | |
53 #include "ash/shelf/shelf_delegate.h" | |
54 #include "ash/shelf/shelf_widget.h" | |
55 #include "ash/shell.h" | |
56 #include "ash/touch/touch_hud_debug.h" | |
57 #include "ash/utility/screenshot_controller.h" | |
58 #include "ash/wm/power_button_controller.h" | |
59 #include "ash/wm/window_state_aura.h" | |
60 #include "ash/wm/window_util.h" | |
61 #include "base/bind.h" | |
62 #include "base/command_line.h" | |
63 #include "base/metrics/histogram_macros.h" | 31 #include "base/metrics/histogram_macros.h" |
64 #include "base/metrics/user_metrics.h" | 32 #include "base/metrics/user_metrics.h" |
65 #include "base/strings/string_split.h" | |
66 #include "base/strings/utf_string_conversions.h" | |
67 #include "ui/aura/env.h" | |
68 #include "ui/base/accelerators/accelerator.h" | 33 #include "ui/base/accelerators/accelerator.h" |
69 #include "ui/base/accelerators/accelerator_manager.h" | 34 #include "ui/base/accelerators/accelerator_manager.h" |
70 #include "ui/base/l10n/l10n_util.h" | |
71 #include "ui/base/resource/resource_bundle.h" | |
72 #include "ui/compositor/layer.h" | |
73 #include "ui/compositor/layer_animation_sequence.h" | |
74 #include "ui/compositor/layer_animator.h" | |
75 #include "ui/display/screen.h" | |
76 #include "ui/events/event.h" | |
77 #include "ui/events/keycodes/keyboard_codes.h" | |
78 #include "ui/message_center/message_center.h" | |
79 #include "ui/message_center/notification.h" | |
80 #include "ui/message_center/notifier_settings.h" | |
81 | 35 |
82 #if defined(OS_CHROMEOS) | 36 #if defined(OS_CHROMEOS) |
83 #include "ash/display/display_configuration_controller.h" | |
84 #include "base/sys_info.h" | |
85 #include "chromeos/dbus/dbus_thread_manager.h" | 37 #include "chromeos/dbus/dbus_thread_manager.h" |
86 #include "chromeos/dbus/power_manager_client.h" | 38 #include "chromeos/dbus/power_manager_client.h" |
87 #include "ui/base/ime/chromeos/ime_keyboard.h" | 39 #include "ui/base/ime/chromeos/ime_keyboard.h" |
88 #include "ui/base/ime/chromeos/input_method_manager.h" | 40 #include "ui/base/ime/chromeos/input_method_manager.h" |
89 #endif // defined(OS_CHROMEOS) | 41 #endif // defined(OS_CHROMEOS) |
90 | 42 |
91 namespace ash { | 43 namespace ash { |
92 namespace { | 44 namespace { |
93 | 45 |
94 using base::UserMetricsAction; | 46 using base::UserMetricsAction; |
95 | 47 |
96 // The notification delegate that will be used to open the keyboard shortcut | |
97 // help page when the notification is clicked. | |
98 class DeprecatedAcceleratorNotificationDelegate | |
99 : public message_center::NotificationDelegate { | |
100 public: | |
101 DeprecatedAcceleratorNotificationDelegate() {} | |
102 | |
103 // message_center::NotificationDelegate: | |
104 bool HasClickedListener() override { return true; } | |
105 | |
106 void Click() override { | |
107 if (!WmShell::Get()->GetSessionStateDelegate()->IsUserSessionBlocked()) | |
108 WmShell::Get()->delegate()->OpenKeyboardShortcutHelpPage(); | |
109 } | |
110 | |
111 private: | |
112 // Private destructor since NotificationDelegate is ref-counted. | |
113 ~DeprecatedAcceleratorNotificationDelegate() override {} | |
114 | |
115 DISALLOW_COPY_AND_ASSIGN(DeprecatedAcceleratorNotificationDelegate); | |
116 }; | |
117 | |
118 ui::Accelerator CreateAccelerator(ui::KeyboardCode keycode, | 48 ui::Accelerator CreateAccelerator(ui::KeyboardCode keycode, |
119 int modifiers, | 49 int modifiers, |
120 bool trigger_on_press) { | 50 bool trigger_on_press) { |
121 ui::Accelerator accelerator(keycode, modifiers); | 51 ui::Accelerator accelerator(keycode, modifiers); |
122 accelerator.set_type(trigger_on_press ? ui::ET_KEY_PRESSED | 52 accelerator.set_type(trigger_on_press ? ui::ET_KEY_PRESSED |
123 : ui::ET_KEY_RELEASED); | 53 : ui::ET_KEY_RELEASED); |
124 return accelerator; | 54 return accelerator; |
125 } | 55 } |
126 | 56 |
127 // Ensures that there are no word breaks at the "+"s in the shortcut texts such | |
128 // as "Ctrl+Shift+Space". | |
129 void EnsureNoWordBreaks(base::string16* shortcut_text) { | |
130 std::vector<base::string16> keys = | |
131 base::SplitString(*shortcut_text, base::ASCIIToUTF16("+"), | |
132 base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); | |
133 | |
134 if (keys.size() < 2U) | |
135 return; | |
136 | |
137 // The plus sign surrounded by the word joiner to guarantee an non-breaking | |
138 // shortcut. | |
139 const base::string16 non_breaking_plus = | |
140 base::UTF8ToUTF16("\xe2\x81\xa0+\xe2\x81\xa0"); | |
141 shortcut_text->clear(); | |
142 for (size_t i = 0; i < keys.size() - 1; ++i) { | |
143 *shortcut_text += keys[i]; | |
144 *shortcut_text += non_breaking_plus; | |
145 } | |
146 | |
147 *shortcut_text += keys.back(); | |
148 } | |
149 | |
150 // Gets the notification message after it formats it in such a way that there | |
151 // are no line breaks in the middle of the shortcut texts. | |
152 base::string16 GetNotificationText(int message_id, | |
153 int old_shortcut_id, | |
154 int new_shortcut_id) { | |
155 base::string16 old_shortcut = l10n_util::GetStringUTF16(old_shortcut_id); | |
156 base::string16 new_shortcut = l10n_util::GetStringUTF16(new_shortcut_id); | |
157 EnsureNoWordBreaks(&old_shortcut); | |
158 EnsureNoWordBreaks(&new_shortcut); | |
159 | |
160 return l10n_util::GetStringFUTF16(message_id, new_shortcut, old_shortcut); | |
161 } | |
162 | |
163 void ShowDeprecatedAcceleratorNotification(const char* const notification_id, | |
164 int message_id, | |
165 int old_shortcut_id, | |
166 int new_shortcut_id) { | |
167 const base::string16 message = | |
168 GetNotificationText(message_id, old_shortcut_id, new_shortcut_id); | |
169 std::unique_ptr<message_center::Notification> notification( | |
170 new message_center::Notification( | |
171 message_center::NOTIFICATION_TYPE_SIMPLE, notification_id, | |
172 base::string16(), message, | |
173 WmShell::Get()->delegate()->GetDeprecatedAcceleratorImage(), | |
174 base::string16(), GURL(), | |
175 message_center::NotifierId( | |
176 message_center::NotifierId::SYSTEM_COMPONENT, | |
177 system_notifier::kNotifierDeprecatedAccelerator), | |
178 message_center::RichNotificationData(), | |
179 new DeprecatedAcceleratorNotificationDelegate)); | |
180 message_center::MessageCenter::Get()->AddNotification( | |
181 std::move(notification)); | |
182 } | |
183 | |
184 void RecordUmaHistogram(const char* histogram_name, | 57 void RecordUmaHistogram(const char* histogram_name, |
185 DeprecatedAcceleratorUsage sample) { | 58 DeprecatedAcceleratorUsage sample) { |
186 auto* histogram = base::LinearHistogram::FactoryGet( | 59 auto* histogram = base::LinearHistogram::FactoryGet( |
187 histogram_name, 1, DEPRECATED_USAGE_COUNT, DEPRECATED_USAGE_COUNT + 1, | 60 histogram_name, 1, DEPRECATED_USAGE_COUNT, DEPRECATED_USAGE_COUNT + 1, |
188 base::HistogramBase::kUmaTargetedHistogramFlag); | 61 base::HistogramBase::kUmaTargetedHistogramFlag); |
189 histogram->Add(sample); | 62 histogram->Add(sample); |
190 } | 63 } |
191 | 64 |
192 void HandleCycleBackwardMRU(const ui::Accelerator& accelerator) { | 65 void HandleCycleBackwardMRU(const ui::Accelerator& accelerator) { |
193 if (accelerator.key_code() == ui::VKEY_TAB) | 66 if (accelerator.key_code() == ui::VKEY_TAB) |
(...skipping 19 matching lines...) Expand all Loading... |
213 break; | 86 break; |
214 } | 87 } |
215 case FocusCycler::BACKWARD: { | 88 case FocusCycler::BACKWARD: { |
216 base::RecordAction(UserMetricsAction("Accel_Focus_Previous_Pane")); | 89 base::RecordAction(UserMetricsAction("Accel_Focus_Previous_Pane")); |
217 break; | 90 break; |
218 } | 91 } |
219 } | 92 } |
220 WmShell::Get()->focus_cycler()->RotateFocus(direction); | 93 WmShell::Get()->focus_cycler()->RotateFocus(direction); |
221 } | 94 } |
222 | 95 |
223 void HandleFocusShelf() { | |
224 base::RecordAction(base::UserMetricsAction("Accel_Focus_Shelf")); | |
225 WmShell::Get()->focus_cycler()->FocusWidget( | |
226 Shelf::ForPrimaryDisplay()->shelf_widget()); | |
227 } | |
228 | |
229 void HandleLaunchAppN(int n) { | |
230 base::RecordAction(UserMetricsAction("Accel_Launch_App")); | |
231 Shelf::ForPrimaryDisplay()->LaunchAppIndexAt(n); | |
232 } | |
233 | |
234 void HandleLaunchLastApp() { | |
235 base::RecordAction(UserMetricsAction("Accel_Launch_Last_App")); | |
236 Shelf::ForPrimaryDisplay()->LaunchAppIndexAt(-1); | |
237 } | |
238 | |
239 bool CanHandleMagnifyScreen() { | |
240 Shell* shell = Shell::GetInstance(); | |
241 return shell->magnification_controller()->IsEnabled() || | |
242 shell->partial_magnification_controller()->is_enabled(); | |
243 } | |
244 | |
245 // Magnify the screen | |
246 void HandleMagnifyScreen(int delta_index) { | |
247 if (Shell::GetInstance()->magnification_controller()->IsEnabled()) { | |
248 // TODO(yoshiki): Move the following logic to MagnificationController. | |
249 float scale = Shell::GetInstance()->magnification_controller()->GetScale(); | |
250 // Calculate rounded logarithm (base kMagnificationScaleFactor) of scale. | |
251 int scale_index = | |
252 std::floor(std::log(scale) / std::log(kMagnificationScaleFactor) + 0.5); | |
253 | |
254 int new_scale_index = std::max(0, std::min(8, scale_index + delta_index)); | |
255 | |
256 Shell::GetInstance()->magnification_controller()->SetScale( | |
257 std::pow(kMagnificationScaleFactor, new_scale_index), true); | |
258 } else if (Shell::GetInstance() | |
259 ->partial_magnification_controller() | |
260 ->is_enabled()) { | |
261 float scale = delta_index > 0 ? kDefaultPartialMagnifiedScale : 1; | |
262 Shell::GetInstance()->partial_magnification_controller()->SetScale(scale); | |
263 } | |
264 } | |
265 | |
266 void HandleMediaNextTrack() { | 96 void HandleMediaNextTrack() { |
267 WmShell::Get()->media_delegate()->HandleMediaNextTrack(); | 97 WmShell::Get()->media_delegate()->HandleMediaNextTrack(); |
268 } | 98 } |
269 | 99 |
270 void HandleMediaPlayPause() { | 100 void HandleMediaPlayPause() { |
271 WmShell::Get()->media_delegate()->HandleMediaPlayPause(); | 101 WmShell::Get()->media_delegate()->HandleMediaPlayPause(); |
272 } | 102 } |
273 | 103 |
274 void HandleMediaPrevTrack() { | 104 void HandleMediaPrevTrack() { |
275 WmShell::Get()->media_delegate()->HandleMediaPrevTrack(); | 105 WmShell::Get()->media_delegate()->HandleMediaPrevTrack(); |
276 } | 106 } |
277 | 107 |
278 bool CanHandleNewIncognitoWindow() { | |
279 return WmShell::Get()->delegate()->IsIncognitoAllowed(); | |
280 } | |
281 | |
282 void HandleNewIncognitoWindow() { | |
283 base::RecordAction(UserMetricsAction("Accel_New_Incognito_Window")); | |
284 Shell::GetInstance()->new_window_delegate()->NewWindow( | |
285 true /* is_incognito */); | |
286 } | |
287 | |
288 void HandleNewTab(const ui::Accelerator& accelerator) { | |
289 if (accelerator.key_code() == ui::VKEY_T) | |
290 base::RecordAction(base::UserMetricsAction("Accel_NewTab_T")); | |
291 Shell::GetInstance()->new_window_delegate()->NewTab(); | |
292 } | |
293 | |
294 void HandleNewWindow() { | |
295 base::RecordAction(base::UserMetricsAction("Accel_New_Window")); | |
296 Shell::GetInstance()->new_window_delegate()->NewWindow( | |
297 false /* is_incognito */); | |
298 } | |
299 | |
300 bool CanHandleNextIme(ImeControlDelegate* ime_control_delegate) { | 108 bool CanHandleNextIme(ImeControlDelegate* ime_control_delegate) { |
301 return ime_control_delegate && ime_control_delegate->CanCycleIme(); | 109 return ime_control_delegate && ime_control_delegate->CanCycleIme(); |
302 } | 110 } |
303 | 111 |
304 // We must avoid showing the Deprecated NEXT_IME notification erronously. | 112 // We must avoid showing the Deprecated NEXT_IME notification erronously. |
305 bool ShouldShowDeprecatedNextImeNotification( | 113 bool ShouldShowDeprecatedNextImeNotification( |
306 const ui::Accelerator& previous_accelerator) { | 114 const ui::Accelerator& previous_accelerator) { |
307 // We only show the deprecation notification if the previous accelerator key | 115 // We only show the deprecation notification if the previous accelerator key |
308 // is ONLY either Shift, or Alt. | 116 // is ONLY either Shift, or Alt. |
309 const ui::KeyboardCode previous_key_code = previous_accelerator.key_code(); | 117 const ui::KeyboardCode previous_key_code = previous_accelerator.key_code(); |
310 switch (previous_key_code) { | 118 switch (previous_key_code) { |
311 case ui::VKEY_SHIFT: | 119 case ui::VKEY_SHIFT: |
312 case ui::VKEY_LSHIFT: | 120 case ui::VKEY_LSHIFT: |
313 case ui::VKEY_RSHIFT: | 121 case ui::VKEY_RSHIFT: |
314 case ui::VKEY_MENU: | 122 case ui::VKEY_MENU: |
315 case ui::VKEY_LMENU: | 123 case ui::VKEY_LMENU: |
316 case ui::VKEY_RMENU: | 124 case ui::VKEY_RMENU: |
317 return true; | 125 return true; |
318 | 126 |
319 default: | 127 default: |
320 return false; | 128 return false; |
321 } | 129 } |
322 } | 130 } |
323 | 131 |
324 void HandleNextIme(ImeControlDelegate* ime_control_delegate) { | 132 void HandleNextIme(ImeControlDelegate* ime_control_delegate) { |
325 base::RecordAction(UserMetricsAction("Accel_Next_Ime")); | 133 base::RecordAction(UserMetricsAction("Accel_Next_Ime")); |
326 ime_control_delegate->HandleNextIme(); | 134 ime_control_delegate->HandleNextIme(); |
327 } | 135 } |
328 | 136 |
329 void HandleOpenFeedbackPage() { | |
330 base::RecordAction(UserMetricsAction("Accel_Open_Feedback_Page")); | |
331 Shell::GetInstance()->new_window_delegate()->OpenFeedbackPage(); | |
332 } | |
333 | |
334 bool CanHandlePreviousIme(ImeControlDelegate* ime_control_delegate) { | 137 bool CanHandlePreviousIme(ImeControlDelegate* ime_control_delegate) { |
335 return ime_control_delegate && ime_control_delegate->CanCycleIme(); | 138 return ime_control_delegate && ime_control_delegate->CanCycleIme(); |
336 } | 139 } |
337 | 140 |
338 void HandlePreviousIme(ImeControlDelegate* ime_control_delegate, | 141 void HandlePreviousIme(ImeControlDelegate* ime_control_delegate, |
339 const ui::Accelerator& accelerator) { | 142 const ui::Accelerator& accelerator) { |
340 base::RecordAction(UserMetricsAction("Accel_Previous_Ime")); | 143 base::RecordAction(UserMetricsAction("Accel_Previous_Ime")); |
341 if (accelerator.type() == ui::ET_KEY_PRESSED) | 144 if (accelerator.type() == ui::ET_KEY_PRESSED) |
342 ime_control_delegate->HandlePreviousIme(); | 145 ime_control_delegate->HandlePreviousIme(); |
343 // Else: consume the Ctrl+Space ET_KEY_RELEASED event but do not do anything. | 146 // Else: consume the Ctrl+Space ET_KEY_RELEASED event but do not do anything. |
344 } | 147 } |
345 | 148 |
346 void HandleRestoreTab() { | |
347 base::RecordAction(base::UserMetricsAction("Accel_Restore_Tab")); | |
348 Shell::GetInstance()->new_window_delegate()->RestoreTab(); | |
349 } | |
350 | |
351 display::Display::Rotation GetNextRotation(display::Display::Rotation current) { | |
352 switch (current) { | |
353 case display::Display::ROTATE_0: | |
354 return display::Display::ROTATE_90; | |
355 case display::Display::ROTATE_90: | |
356 return display::Display::ROTATE_180; | |
357 case display::Display::ROTATE_180: | |
358 return display::Display::ROTATE_270; | |
359 case display::Display::ROTATE_270: | |
360 return display::Display::ROTATE_0; | |
361 } | |
362 NOTREACHED() << "Unknown rotation:" << current; | |
363 return display::Display::ROTATE_0; | |
364 } | |
365 | |
366 // Rotates the screen. | |
367 void HandleRotateScreen() { | |
368 if (Shell::GetInstance()->display_manager()->IsInUnifiedMode()) | |
369 return; | |
370 | |
371 base::RecordAction(UserMetricsAction("Accel_Rotate_Window")); | |
372 gfx::Point point = display::Screen::GetScreen()->GetCursorScreenPoint(); | |
373 display::Display display = | |
374 display::Screen::GetScreen()->GetDisplayNearestPoint(point); | |
375 const DisplayInfo& display_info = | |
376 Shell::GetInstance()->display_manager()->GetDisplayInfo(display.id()); | |
377 ScreenRotationAnimator(display.id()) | |
378 .Rotate(GetNextRotation(display_info.GetActiveRotation()), | |
379 display::Display::ROTATION_SOURCE_USER); | |
380 } | |
381 | |
382 // Rotate the active window. | |
383 void HandleRotateActiveWindow() { | |
384 base::RecordAction(UserMetricsAction("Accel_Rotate_Window")); | |
385 aura::Window* active_window = wm::GetActiveWindow(); | |
386 if (active_window) { | |
387 // The rotation animation bases its target transform on the current | |
388 // rotation and position. Since there could be an animation in progress | |
389 // right now, queue this animation so when it starts it picks up a neutral | |
390 // rotation and position. Use replace so we only enqueue one at a time. | |
391 active_window->layer()->GetAnimator()->set_preemption_strategy( | |
392 ui::LayerAnimator::REPLACE_QUEUED_ANIMATIONS); | |
393 active_window->layer()->GetAnimator()->StartAnimation( | |
394 new ui::LayerAnimationSequence( | |
395 new WindowRotation(360, active_window->layer()))); | |
396 } | |
397 } | |
398 | |
399 void HandleShowKeyboardOverlay() { | |
400 base::RecordAction(UserMetricsAction("Accel_Show_Keyboard_Overlay")); | |
401 Shell::GetInstance()->new_window_delegate()->ShowKeyboardOverlay(); | |
402 } | |
403 | |
404 bool CanHandleShowMessageCenterBubble() { | |
405 RootWindowController* controller = | |
406 RootWindowController::ForTargetRootWindow(); | |
407 StatusAreaWidget* status_area_widget = | |
408 controller->shelf_widget()->status_area_widget(); | |
409 return status_area_widget && | |
410 status_area_widget->web_notification_tray()->visible(); | |
411 } | |
412 | |
413 void HandleShowMessageCenterBubble() { | |
414 base::RecordAction(UserMetricsAction("Accel_Show_Message_Center_Bubble")); | |
415 RootWindowController* controller = | |
416 RootWindowController::ForTargetRootWindow(); | |
417 StatusAreaWidget* status_area_widget = | |
418 controller->shelf_widget()->status_area_widget(); | |
419 if (status_area_widget) { | |
420 WebNotificationTray* notification_tray = | |
421 status_area_widget->web_notification_tray(); | |
422 if (notification_tray->visible()) | |
423 notification_tray->ShowMessageCenterBubble(); | |
424 } | |
425 } | |
426 | |
427 void HandleShowSystemTrayBubble() { | |
428 base::RecordAction(UserMetricsAction("Accel_Show_System_Tray_Bubble")); | |
429 RootWindowController* controller = | |
430 RootWindowController::ForTargetRootWindow(); | |
431 if (!controller->GetSystemTray()->HasSystemBubble()) | |
432 controller->GetSystemTray()->ShowDefaultView(BUBBLE_CREATE_NEW); | |
433 } | |
434 | |
435 void HandleShowTaskManager() { | |
436 base::RecordAction(UserMetricsAction("Accel_Show_Task_Manager")); | |
437 Shell::GetInstance()->new_window_delegate()->ShowTaskManager(); | |
438 } | |
439 | |
440 bool CanHandleSwitchIme(ImeControlDelegate* ime_control_delegate, | 149 bool CanHandleSwitchIme(ImeControlDelegate* ime_control_delegate, |
441 const ui::Accelerator& accelerator) { | 150 const ui::Accelerator& accelerator) { |
442 return ime_control_delegate && | 151 return ime_control_delegate && |
443 ime_control_delegate->CanSwitchIme(accelerator); | 152 ime_control_delegate->CanSwitchIme(accelerator); |
444 } | 153 } |
445 | 154 |
446 void HandleSwitchIme(ImeControlDelegate* ime_control_delegate, | 155 void HandleSwitchIme(ImeControlDelegate* ime_control_delegate, |
447 const ui::Accelerator& accelerator) { | 156 const ui::Accelerator& accelerator) { |
448 base::RecordAction(UserMetricsAction("Accel_Switch_Ime")); | 157 base::RecordAction(UserMetricsAction("Accel_Switch_Ime")); |
449 ime_control_delegate->HandleSwitchIme(accelerator); | 158 ime_control_delegate->HandleSwitchIme(accelerator); |
450 } | 159 } |
451 | 160 |
452 void HandleTakeWindowScreenshot(ScreenshotDelegate* screenshot_delegate) { | |
453 base::RecordAction(UserMetricsAction("Accel_Take_Window_Screenshot")); | |
454 DCHECK(screenshot_delegate); | |
455 Shell::GetInstance()->screenshot_controller()->StartWindowScreenshotSession( | |
456 screenshot_delegate); | |
457 } | |
458 | |
459 void HandleTakePartialScreenshot(ScreenshotDelegate* screenshot_delegate) { | |
460 base::RecordAction(UserMetricsAction("Accel_Take_Partial_Screenshot")); | |
461 DCHECK(screenshot_delegate); | |
462 Shell::GetInstance()->screenshot_controller()->StartPartialScreenshotSession( | |
463 screenshot_delegate); | |
464 } | |
465 | |
466 void HandleTakeScreenshot(ScreenshotDelegate* screenshot_delegate) { | |
467 base::RecordAction(UserMetricsAction("Accel_Take_Screenshot")); | |
468 DCHECK(screenshot_delegate); | |
469 if (screenshot_delegate->CanTakeScreenshot()) | |
470 screenshot_delegate->HandleTakeScreenshotForAllRootWindows(); | |
471 } | |
472 | |
473 bool CanHandleToggleAppList(const ui::Accelerator& accelerator, | |
474 const ui::Accelerator& previous_accelerator) { | |
475 if (accelerator.key_code() == ui::VKEY_LWIN) { | |
476 // If something else was pressed between the Search key (LWIN) | |
477 // being pressed and released, then ignore the release of the | |
478 // Search key. | |
479 if (previous_accelerator.type() != ui::ET_KEY_PRESSED || | |
480 previous_accelerator.key_code() != ui::VKEY_LWIN) { | |
481 return false; | |
482 } | |
483 | |
484 // When spoken feedback is enabled, we should neither toggle the list nor | |
485 // consume the key since Search+Shift is one of the shortcuts the a11y | |
486 // feature uses. crbug.com/132296 | |
487 if (WmShell::Get()->accessibility_delegate()->IsSpokenFeedbackEnabled()) | |
488 return false; | |
489 } | |
490 return true; | |
491 } | |
492 | |
493 void HandleToggleAppList(const ui::Accelerator& accelerator) { | |
494 if (accelerator.key_code() == ui::VKEY_LWIN) | |
495 base::RecordAction(base::UserMetricsAction("Accel_Search_LWin")); | |
496 Shell::GetInstance()->ToggleAppList(NULL); | |
497 } | |
498 | |
499 void HandleToggleFullscreen(const ui::Accelerator& accelerator) { | 161 void HandleToggleFullscreen(const ui::Accelerator& accelerator) { |
500 if (accelerator.key_code() == ui::VKEY_MEDIA_LAUNCH_APP2) | 162 if (accelerator.key_code() == ui::VKEY_MEDIA_LAUNCH_APP2) |
501 base::RecordAction(UserMetricsAction("Accel_Fullscreen_F4")); | 163 base::RecordAction(UserMetricsAction("Accel_Fullscreen_F4")); |
502 accelerators::ToggleFullscreen(); | 164 accelerators::ToggleFullscreen(); |
503 } | 165 } |
504 | 166 |
505 void HandleToggleOverview() { | 167 void HandleToggleOverview() { |
506 base::RecordAction(base::UserMetricsAction("Accel_Overview_F5")); | 168 base::RecordAction(base::UserMetricsAction("Accel_Overview_F5")); |
507 WmShell::Get()->window_selector_controller()->ToggleOverview(); | 169 WmShell::Get()->window_selector_controller()->ToggleOverview(); |
508 } | 170 } |
509 | 171 |
510 bool CanHandleWindowSnapOrDock() { | 172 bool CanHandleWindowSnapOrDock() { |
511 wm::WindowState* window_state = wm::GetActiveWindowState(); | 173 WmWindow* active_window = WmShell::Get()->GetActiveWindow(); |
| 174 if (!active_window) |
| 175 return false; |
| 176 wm::WindowState* window_state = active_window->GetWindowState(); |
512 // Disable window snapping shortcut key for full screen window due to | 177 // Disable window snapping shortcut key for full screen window due to |
513 // http://crbug.com/135487. | 178 // http://crbug.com/135487. |
514 return (window_state && window_state->IsUserPositionable() && | 179 return (window_state && window_state->IsUserPositionable() && |
515 !window_state->IsFullscreen()); | 180 !window_state->IsFullscreen()); |
516 } | 181 } |
517 | 182 |
518 void HandleWindowSnapOrDock(AcceleratorAction action) { | 183 void HandleWindowSnapOrDock(AcceleratorAction action) { |
519 if (action == WINDOW_CYCLE_SNAP_DOCK_LEFT) | 184 if (action == WINDOW_CYCLE_SNAP_DOCK_LEFT) |
520 base::RecordAction(UserMetricsAction("Accel_Window_Snap_Left")); | 185 base::RecordAction(UserMetricsAction("Accel_Window_Snap_Left")); |
521 else | 186 else |
522 base::RecordAction(UserMetricsAction("Accel_Window_Snap_Right")); | 187 base::RecordAction(UserMetricsAction("Accel_Window_Snap_Right")); |
523 | 188 |
524 const wm::WMEvent event(action == WINDOW_CYCLE_SNAP_DOCK_LEFT | 189 const wm::WMEvent event(action == WINDOW_CYCLE_SNAP_DOCK_LEFT |
525 ? wm::WM_EVENT_CYCLE_SNAP_DOCK_LEFT | 190 ? wm::WM_EVENT_CYCLE_SNAP_DOCK_LEFT |
526 : wm::WM_EVENT_CYCLE_SNAP_DOCK_RIGHT); | 191 : wm::WM_EVENT_CYCLE_SNAP_DOCK_RIGHT); |
527 wm::GetActiveWindowState()->OnWMEvent(&event); | 192 WmWindow* active_window = WmShell::Get()->GetActiveWindow(); |
| 193 DCHECK(active_window); |
| 194 active_window->GetWindowState()->OnWMEvent(&event); |
528 } | 195 } |
529 | 196 |
530 void HandleWindowMinimize() { | 197 void HandleWindowMinimize() { |
531 base::RecordAction(base::UserMetricsAction("Accel_Toggle_Minimized_Minus")); | 198 base::RecordAction(base::UserMetricsAction("Accel_Toggle_Minimized_Minus")); |
532 accelerators::ToggleMinimized(); | 199 accelerators::ToggleMinimized(); |
533 } | 200 } |
534 | 201 |
535 bool CanHandlePositionCenter() { | 202 bool CanHandlePositionCenter() { |
536 // Docked windows do not support centering. | 203 // Docked windows do not support centering. |
537 wm::WindowState* window_state = wm::GetActiveWindowState(); | 204 WmWindow* active_window = WmShell::Get()->GetActiveWindow(); |
538 return (window_state && !window_state->IsDocked()); | 205 return (active_window && !active_window->GetWindowState()->IsDocked()); |
539 } | 206 } |
540 | 207 |
541 void HandlePositionCenter() { | 208 void HandlePositionCenter() { |
542 base::RecordAction(UserMetricsAction("Accel_Window_Position_Center")); | 209 base::RecordAction(UserMetricsAction("Accel_Window_Position_Center")); |
543 wm::CenterWindow(wm::GetActiveWindow()); | 210 wm::CenterWindow(WmShell::Get()->GetActiveWindow()); |
544 } | |
545 | |
546 bool CanHandleUnpin() { | |
547 wm::WindowState* window_state = wm::GetActiveWindowState(); | |
548 return window_state && window_state->IsPinned(); | |
549 } | |
550 | |
551 void HandleUnpin() { | |
552 accelerators::Unpin(); | |
553 } | 211 } |
554 | 212 |
555 #if defined(OS_CHROMEOS) | 213 #if defined(OS_CHROMEOS) |
556 bool CanHandleDisableCapsLock(const ui::Accelerator& previous_accelerator) { | 214 bool CanHandleDisableCapsLock(const ui::Accelerator& previous_accelerator) { |
557 ui::KeyboardCode previous_key_code = previous_accelerator.key_code(); | 215 ui::KeyboardCode previous_key_code = previous_accelerator.key_code(); |
558 if (previous_accelerator.type() == ui::ET_KEY_RELEASED || | 216 if (previous_accelerator.type() == ui::ET_KEY_RELEASED || |
559 (previous_key_code != ui::VKEY_LSHIFT && | 217 (previous_key_code != ui::VKEY_LSHIFT && |
560 previous_key_code != ui::VKEY_SHIFT && | 218 previous_key_code != ui::VKEY_SHIFT && |
561 previous_key_code != ui::VKEY_RSHIFT)) { | 219 previous_key_code != ui::VKEY_RSHIFT)) { |
562 // If something else was pressed between the Shift key being pressed | 220 // If something else was pressed between the Shift key being pressed |
(...skipping 21 matching lines...) Expand all Loading... |
584 void HandleLock() { | 242 void HandleLock() { |
585 base::RecordAction(UserMetricsAction("Accel_LockScreen_L")); | 243 base::RecordAction(UserMetricsAction("Accel_LockScreen_L")); |
586 WmShell::Get()->GetSessionStateDelegate()->LockScreen(); | 244 WmShell::Get()->GetSessionStateDelegate()->LockScreen(); |
587 } | 245 } |
588 | 246 |
589 void HandleSuspend() { | 247 void HandleSuspend() { |
590 base::RecordAction(UserMetricsAction("Accel_Suspend")); | 248 base::RecordAction(UserMetricsAction("Accel_Suspend")); |
591 chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RequestSuspend(); | 249 chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RequestSuspend(); |
592 } | 250 } |
593 | 251 |
594 void HandleCrosh() { | |
595 base::RecordAction(UserMetricsAction("Accel_Open_Crosh")); | |
596 | |
597 Shell::GetInstance()->new_window_delegate()->OpenCrosh(); | |
598 } | |
599 | |
600 void HandleFileManager() { | |
601 base::RecordAction(UserMetricsAction("Accel_Open_File_Manager")); | |
602 | |
603 Shell::GetInstance()->new_window_delegate()->OpenFileManager(); | |
604 } | |
605 | |
606 void HandleGetHelp() { | |
607 Shell::GetInstance()->new_window_delegate()->OpenGetHelp(); | |
608 } | |
609 | |
610 void HandleSwapPrimaryDisplay() { | |
611 base::RecordAction(UserMetricsAction("Accel_Swap_Primary_Display")); | |
612 Shell::GetInstance()->display_configuration_controller()->SetPrimaryDisplayId( | |
613 ScreenUtil::GetSecondaryDisplay().id(), true /* user_action */); | |
614 } | |
615 | |
616 bool CanHandleCycleUser() { | 252 bool CanHandleCycleUser() { |
617 return WmShell::Get()->delegate()->IsMultiProfilesEnabled() && | 253 return WmShell::Get()->delegate()->IsMultiProfilesEnabled() && |
618 WmShell::Get()->GetSessionStateDelegate()->NumberOfLoggedInUsers() > 1; | 254 WmShell::Get()->GetSessionStateDelegate()->NumberOfLoggedInUsers() > 1; |
619 } | 255 } |
620 | 256 |
621 void HandleCycleUser(SessionStateDelegate::CycleUser cycle_user) { | 257 void HandleCycleUser(SessionStateDelegate::CycleUser cycle_user) { |
622 MultiProfileUMA::RecordSwitchActiveUser( | 258 MultiProfileUMA::RecordSwitchActiveUser( |
623 MultiProfileUMA::SWITCH_ACTIVE_USER_BY_ACCELERATOR); | 259 MultiProfileUMA::SWITCH_ACTIVE_USER_BY_ACCELERATOR); |
624 switch (cycle_user) { | 260 switch (cycle_user) { |
625 case SessionStateDelegate::CYCLE_TO_NEXT_USER: | 261 case SessionStateDelegate::CYCLE_TO_NEXT_USER: |
(...skipping 23 matching lines...) Expand all Loading... |
649 } | 285 } |
650 | 286 |
651 void HandleToggleCapsLock() { | 287 void HandleToggleCapsLock() { |
652 base::RecordAction(UserMetricsAction("Accel_Toggle_Caps_Lock")); | 288 base::RecordAction(UserMetricsAction("Accel_Toggle_Caps_Lock")); |
653 chromeos::input_method::InputMethodManager* ime = | 289 chromeos::input_method::InputMethodManager* ime = |
654 chromeos::input_method::InputMethodManager::Get(); | 290 chromeos::input_method::InputMethodManager::Get(); |
655 chromeos::input_method::ImeKeyboard* keyboard = ime->GetImeKeyboard(); | 291 chromeos::input_method::ImeKeyboard* keyboard = ime->GetImeKeyboard(); |
656 keyboard->SetCapsLockEnabled(!keyboard->CapsLockIsEnabled()); | 292 keyboard->SetCapsLockEnabled(!keyboard->CapsLockIsEnabled()); |
657 } | 293 } |
658 | 294 |
659 void HandleToggleMirrorMode() { | |
660 base::RecordAction(UserMetricsAction("Accel_Toggle_Mirror_Mode")); | |
661 bool mirror = !Shell::GetInstance()->display_manager()->IsInMirrorMode(); | |
662 Shell::GetInstance()->display_configuration_controller()->SetMirrorMode( | |
663 mirror, true /* user_action */); | |
664 } | |
665 | |
666 void HandleToggleSpokenFeedback() { | 295 void HandleToggleSpokenFeedback() { |
667 base::RecordAction(UserMetricsAction("Accel_Toggle_Spoken_Feedback")); | 296 base::RecordAction(UserMetricsAction("Accel_Toggle_Spoken_Feedback")); |
668 | 297 |
669 WmShell::Get()->accessibility_delegate()->ToggleSpokenFeedback( | 298 WmShell::Get()->accessibility_delegate()->ToggleSpokenFeedback( |
670 A11Y_NOTIFICATION_SHOW); | 299 A11Y_NOTIFICATION_SHOW); |
671 } | 300 } |
672 | 301 |
673 bool CanHandleTouchHud() { | |
674 return RootWindowController::ForTargetRootWindow()->touch_hud_debug(); | |
675 } | |
676 | |
677 void HandleTouchHudClear() { | |
678 RootWindowController::ForTargetRootWindow()->touch_hud_debug()->Clear(); | |
679 } | |
680 | |
681 void HandleTouchHudModeChange() { | |
682 RootWindowController* controller = | |
683 RootWindowController::ForTargetRootWindow(); | |
684 controller->touch_hud_debug()->ChangeToNextMode(); | |
685 } | |
686 | |
687 void HandleVolumeDown(const ui::Accelerator& accelerator) { | 302 void HandleVolumeDown(const ui::Accelerator& accelerator) { |
688 VolumeControlDelegate* volume_delegate = | 303 VolumeControlDelegate* volume_delegate = |
689 WmShell::Get()->system_tray_delegate()->GetVolumeControlDelegate(); | 304 WmShell::Get()->system_tray_delegate()->GetVolumeControlDelegate(); |
690 if (volume_delegate) | 305 if (volume_delegate) |
691 volume_delegate->HandleVolumeDown(accelerator); | 306 volume_delegate->HandleVolumeDown(accelerator); |
692 } | 307 } |
693 | 308 |
694 void HandleVolumeMute(const ui::Accelerator& accelerator) { | 309 void HandleVolumeMute(const ui::Accelerator& accelerator) { |
695 VolumeControlDelegate* volume_delegate = | 310 VolumeControlDelegate* volume_delegate = |
696 WmShell::Get()->system_tray_delegate()->GetVolumeControlDelegate(); | 311 WmShell::Get()->system_tray_delegate()->GetVolumeControlDelegate(); |
697 if (volume_delegate) | 312 if (volume_delegate) |
698 volume_delegate->HandleVolumeMute(accelerator); | 313 volume_delegate->HandleVolumeMute(accelerator); |
699 } | 314 } |
700 | 315 |
701 void HandleVolumeUp(const ui::Accelerator& accelerator) { | 316 void HandleVolumeUp(const ui::Accelerator& accelerator) { |
702 VolumeControlDelegate* volume_delegate = | 317 VolumeControlDelegate* volume_delegate = |
703 WmShell::Get()->system_tray_delegate()->GetVolumeControlDelegate(); | 318 WmShell::Get()->system_tray_delegate()->GetVolumeControlDelegate(); |
704 if (volume_delegate) | 319 if (volume_delegate) |
705 volume_delegate->HandleVolumeUp(accelerator); | 320 volume_delegate->HandleVolumeUp(accelerator); |
706 } | 321 } |
707 | 322 |
708 #endif // defined(OS_CHROMEOS) | 323 #endif // defined(OS_CHROMEOS) |
709 | 324 |
710 } // namespace | 325 } // namespace |
711 | 326 |
712 //////////////////////////////////////////////////////////////////////////////// | 327 //////////////////////////////////////////////////////////////////////////////// |
713 // AcceleratorController, public: | 328 // AcceleratorController, public: |
714 | 329 |
715 AcceleratorController::AcceleratorController() | 330 AcceleratorController::AcceleratorController( |
716 : accelerator_manager_(new ui::AcceleratorManager), | 331 AcceleratorControllerDelegate* delegate) |
| 332 : delegate_(delegate), |
| 333 accelerator_manager_(new ui::AcceleratorManager), |
717 accelerator_history_(new ui::AcceleratorHistory) { | 334 accelerator_history_(new ui::AcceleratorHistory) { |
718 Init(); | 335 Init(); |
719 } | 336 } |
720 | 337 |
721 AcceleratorController::~AcceleratorController() {} | 338 AcceleratorController::~AcceleratorController() {} |
722 | 339 |
723 void AcceleratorController::Register(const ui::Accelerator& accelerator, | 340 void AcceleratorController::Register(const ui::Accelerator& accelerator, |
724 ui::AcceleratorTarget* target) { | 341 ui::AcceleratorTarget* target) { |
725 accelerator_manager_->Register( | 342 accelerator_manager_->Register( |
726 accelerator, ui::AcceleratorManager::kNormalPriority, target); | 343 accelerator, ui::AcceleratorManager::kNormalPriority, target); |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
780 AcceleratorController::AcceleratorProcessingRestriction | 397 AcceleratorController::AcceleratorProcessingRestriction |
781 AcceleratorController::GetCurrentAcceleratorRestriction() { | 398 AcceleratorController::GetCurrentAcceleratorRestriction() { |
782 return GetAcceleratorProcessingRestriction(-1); | 399 return GetAcceleratorProcessingRestriction(-1); |
783 } | 400 } |
784 | 401 |
785 void AcceleratorController::SetImeControlDelegate( | 402 void AcceleratorController::SetImeControlDelegate( |
786 std::unique_ptr<ImeControlDelegate> ime_control_delegate) { | 403 std::unique_ptr<ImeControlDelegate> ime_control_delegate) { |
787 ime_control_delegate_ = std::move(ime_control_delegate); | 404 ime_control_delegate_ = std::move(ime_control_delegate); |
788 } | 405 } |
789 | 406 |
790 void AcceleratorController::SetScreenshotDelegate( | |
791 std::unique_ptr<ScreenshotDelegate> screenshot_delegate) { | |
792 screenshot_delegate_ = std::move(screenshot_delegate); | |
793 } | |
794 | |
795 bool AcceleratorController::ShouldCloseMenuAndRepostAccelerator( | 407 bool AcceleratorController::ShouldCloseMenuAndRepostAccelerator( |
796 const ui::Accelerator& accelerator) const { | 408 const ui::Accelerator& accelerator) const { |
797 auto itr = accelerators_.find(accelerator); | 409 auto itr = accelerators_.find(accelerator); |
798 if (itr == accelerators_.end()) | 410 if (itr == accelerators_.end()) |
799 return false; // Menu shouldn't be closed for an invalid accelerator. | 411 return false; // Menu shouldn't be closed for an invalid accelerator. |
800 | 412 |
801 AcceleratorAction action = itr->second; | 413 AcceleratorAction action = itr->second; |
802 return actions_keeping_menu_open_.count(action) == 0; | 414 return actions_keeping_menu_open_.count(action) == 0; |
803 } | 415 } |
804 | 416 |
(...skipping 15 matching lines...) Expand all Loading... |
820 if (deprecated_accelerators_.count(accelerator)) { | 432 if (deprecated_accelerators_.count(accelerator)) { |
821 // This accelerator has been deprecated and should be treated according | 433 // This accelerator has been deprecated and should be treated according |
822 // to its |DeprecatedAcceleratorData|. | 434 // to its |DeprecatedAcceleratorData|. |
823 | 435 |
824 // Record UMA stats. | 436 // Record UMA stats. |
825 RecordUmaHistogram(data->uma_histogram_name, DEPRECATED_USED); | 437 RecordUmaHistogram(data->uma_histogram_name, DEPRECATED_USED); |
826 | 438 |
827 // We always display the notification as long as this entry exists, | 439 // We always display the notification as long as this entry exists, |
828 // except for NEXT_IME, we must check to avoid showing it for the wrong | 440 // except for NEXT_IME, we must check to avoid showing it for the wrong |
829 // shortcut, as Alt+Shift is tricky and trigger the action on release. | 441 // shortcut, as Alt+Shift is tricky and trigger the action on release. |
830 if (action != NEXT_IME || | 442 if (delegate_ && |
831 (action == NEXT_IME && | 443 (action != NEXT_IME || |
832 ShouldShowDeprecatedNextImeNotification( | 444 (action == NEXT_IME && |
833 accelerator_history_->previous_accelerator()))) { | 445 ShouldShowDeprecatedNextImeNotification( |
834 ShowDeprecatedAcceleratorNotification( | 446 accelerator_history_->previous_accelerator())))) { |
| 447 delegate_->ShowDeprecatedAcceleratorNotification( |
835 data->uma_histogram_name, data->notification_message_id, | 448 data->uma_histogram_name, data->notification_message_id, |
836 data->old_shortcut_id, data->new_shortcut_id); | 449 data->old_shortcut_id, data->new_shortcut_id); |
837 } | 450 } |
838 | 451 |
839 if (!data->deprecated_enabled) | 452 if (!data->deprecated_enabled) |
840 return false; | 453 return false; |
841 } else { | 454 } else { |
842 // This is a new accelerator replacing the old deprecated one. | 455 // This is a new accelerator replacing the old deprecated one. |
843 // Record UMA stats and proceed normally. | 456 // Record UMA stats and proceed normally. |
844 RecordUmaHistogram(data->uma_histogram_name, NEW_USED); | 457 RecordUmaHistogram(data->uma_histogram_name, NEW_USED); |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
953 case DEBUG_PRINT_LAYER_HIERARCHY: | 566 case DEBUG_PRINT_LAYER_HIERARCHY: |
954 case DEBUG_PRINT_VIEW_HIERARCHY: | 567 case DEBUG_PRINT_VIEW_HIERARCHY: |
955 case DEBUG_PRINT_WINDOW_HIERARCHY: | 568 case DEBUG_PRINT_WINDOW_HIERARCHY: |
956 case DEBUG_TOGGLE_DESKTOP_BACKGROUND_MODE: | 569 case DEBUG_TOGGLE_DESKTOP_BACKGROUND_MODE: |
957 case DEBUG_TOGGLE_DEVICE_SCALE_FACTOR: | 570 case DEBUG_TOGGLE_DEVICE_SCALE_FACTOR: |
958 case DEBUG_TOGGLE_ROOT_WINDOW_FULL_SCREEN: | 571 case DEBUG_TOGGLE_ROOT_WINDOW_FULL_SCREEN: |
959 case DEBUG_TOGGLE_SHOW_DEBUG_BORDERS: | 572 case DEBUG_TOGGLE_SHOW_DEBUG_BORDERS: |
960 case DEBUG_TOGGLE_SHOW_FPS_COUNTER: | 573 case DEBUG_TOGGLE_SHOW_FPS_COUNTER: |
961 case DEBUG_TOGGLE_SHOW_PAINT_RECTS: | 574 case DEBUG_TOGGLE_SHOW_PAINT_RECTS: |
962 return debug::DebugAcceleratorsEnabled(); | 575 return debug::DebugAcceleratorsEnabled(); |
963 case MAGNIFY_SCREEN_ZOOM_IN: | |
964 case MAGNIFY_SCREEN_ZOOM_OUT: | |
965 return CanHandleMagnifyScreen(); | |
966 case NEW_INCOGNITO_WINDOW: | |
967 return CanHandleNewIncognitoWindow(); | |
968 case NEXT_IME: | 576 case NEXT_IME: |
969 return CanHandleNextIme(ime_control_delegate_.get()); | 577 return CanHandleNextIme(ime_control_delegate_.get()); |
970 case PREVIOUS_IME: | 578 case PREVIOUS_IME: |
971 return CanHandlePreviousIme(ime_control_delegate_.get()); | 579 return CanHandlePreviousIme(ime_control_delegate_.get()); |
972 case SCALE_UI_RESET: | |
973 case SCALE_UI_UP: | |
974 case SCALE_UI_DOWN: | |
975 return accelerators::IsInternalDisplayZoomEnabled(); | |
976 case SHOW_MESSAGE_CENTER_BUBBLE: | |
977 return CanHandleShowMessageCenterBubble(); | |
978 case SWITCH_IME: | 580 case SWITCH_IME: |
979 return CanHandleSwitchIme(ime_control_delegate_.get(), accelerator); | 581 return CanHandleSwitchIme(ime_control_delegate_.get(), accelerator); |
980 case TOGGLE_APP_LIST: | |
981 return CanHandleToggleAppList(accelerator, previous_accelerator); | |
982 case WINDOW_CYCLE_SNAP_DOCK_LEFT: | 582 case WINDOW_CYCLE_SNAP_DOCK_LEFT: |
983 case WINDOW_CYCLE_SNAP_DOCK_RIGHT: | 583 case WINDOW_CYCLE_SNAP_DOCK_RIGHT: |
984 return CanHandleWindowSnapOrDock(); | 584 return CanHandleWindowSnapOrDock(); |
985 case WINDOW_POSITION_CENTER: | 585 case WINDOW_POSITION_CENTER: |
986 return CanHandlePositionCenter(); | 586 return CanHandlePositionCenter(); |
987 case UNPIN: | |
988 return CanHandleUnpin(); | |
989 #if defined(OS_CHROMEOS) | 587 #if defined(OS_CHROMEOS) |
990 case DEBUG_ADD_REMOVE_DISPLAY: | 588 case DEBUG_ADD_REMOVE_DISPLAY: |
991 case DEBUG_SHOW_TOAST: | 589 case DEBUG_SHOW_TOAST: |
992 case DEBUG_TOGGLE_TOUCH_PAD: | 590 case DEBUG_TOGGLE_TOUCH_PAD: |
993 case DEBUG_TOGGLE_TOUCH_SCREEN: | 591 case DEBUG_TOGGLE_TOUCH_SCREEN: |
994 case DEBUG_TOGGLE_TOUCH_VIEW: | 592 case DEBUG_TOGGLE_TOUCH_VIEW: |
995 case DEBUG_TOGGLE_UNIFIED_DESKTOP: | 593 case DEBUG_TOGGLE_UNIFIED_DESKTOP: |
996 return debug::DebugAcceleratorsEnabled(); | 594 return debug::DebugAcceleratorsEnabled(); |
997 case DISABLE_CAPS_LOCK: | 595 case DISABLE_CAPS_LOCK: |
998 return CanHandleDisableCapsLock(previous_accelerator); | 596 return CanHandleDisableCapsLock(previous_accelerator); |
999 case LOCK_SCREEN: | 597 case LOCK_SCREEN: |
1000 return CanHandleLock(); | 598 return CanHandleLock(); |
1001 case SWITCH_TO_PREVIOUS_USER: | 599 case SWITCH_TO_PREVIOUS_USER: |
1002 case SWITCH_TO_NEXT_USER: | 600 case SWITCH_TO_NEXT_USER: |
1003 return CanHandleCycleUser(); | 601 return CanHandleCycleUser(); |
1004 case TOGGLE_CAPS_LOCK: | 602 case TOGGLE_CAPS_LOCK: |
1005 return CanHandleToggleCapsLock(accelerator, previous_accelerator); | 603 return CanHandleToggleCapsLock(accelerator, previous_accelerator); |
1006 case TOUCH_HUD_CLEAR: | |
1007 case TOUCH_HUD_MODE_CHANGE: | |
1008 return CanHandleTouchHud(); | |
1009 case SWAP_PRIMARY_DISPLAY: | |
1010 return display::Screen::GetScreen()->GetNumDisplays() > 1; | |
1011 #endif | 604 #endif |
1012 case CYCLE_BACKWARD_MRU: | 605 case CYCLE_BACKWARD_MRU: |
1013 case CYCLE_FORWARD_MRU: | 606 case CYCLE_FORWARD_MRU: |
1014 case EXIT: | 607 case EXIT: |
1015 case FOCUS_NEXT_PANE: | 608 case FOCUS_NEXT_PANE: |
1016 case FOCUS_PREVIOUS_PANE: | 609 case FOCUS_PREVIOUS_PANE: |
1017 case FOCUS_SHELF: | |
1018 case LAUNCH_APP_0: | |
1019 case LAUNCH_APP_1: | |
1020 case LAUNCH_APP_2: | |
1021 case LAUNCH_APP_3: | |
1022 case LAUNCH_APP_4: | |
1023 case LAUNCH_APP_5: | |
1024 case LAUNCH_APP_6: | |
1025 case LAUNCH_APP_7: | |
1026 case LAUNCH_LAST_APP: | |
1027 case MEDIA_NEXT_TRACK: | 610 case MEDIA_NEXT_TRACK: |
1028 case MEDIA_PLAY_PAUSE: | 611 case MEDIA_PLAY_PAUSE: |
1029 case MEDIA_PREV_TRACK: | 612 case MEDIA_PREV_TRACK: |
1030 case NEW_TAB: | |
1031 case NEW_WINDOW: | |
1032 case OPEN_FEEDBACK_PAGE: | |
1033 case PRINT_UI_HIERARCHIES: | 613 case PRINT_UI_HIERARCHIES: |
1034 case RESTORE_TAB: | |
1035 case ROTATE_SCREEN: | |
1036 case ROTATE_WINDOW: | |
1037 case SHOW_KEYBOARD_OVERLAY: | |
1038 case SHOW_SYSTEM_TRAY_BUBBLE: | |
1039 case SHOW_TASK_MANAGER: | |
1040 case TAKE_WINDOW_SCREENSHOT: | |
1041 case TAKE_PARTIAL_SCREENSHOT: | |
1042 case TAKE_SCREENSHOT: | |
1043 case TOGGLE_FULLSCREEN: | 614 case TOGGLE_FULLSCREEN: |
1044 case TOGGLE_MAXIMIZED: | 615 case TOGGLE_MAXIMIZED: |
1045 case TOGGLE_OVERVIEW: | 616 case TOGGLE_OVERVIEW: |
1046 case WINDOW_MINIMIZE: | 617 case WINDOW_MINIMIZE: |
1047 #if defined(OS_CHROMEOS) | 618 #if defined(OS_CHROMEOS) |
1048 case BRIGHTNESS_DOWN: | 619 case BRIGHTNESS_DOWN: |
1049 case BRIGHTNESS_UP: | 620 case BRIGHTNESS_UP: |
1050 case DISABLE_GPU_WATCHDOG: | |
1051 case KEYBOARD_BRIGHTNESS_DOWN: | 621 case KEYBOARD_BRIGHTNESS_DOWN: |
1052 case KEYBOARD_BRIGHTNESS_UP: | 622 case KEYBOARD_BRIGHTNESS_UP: |
1053 case LOCK_PRESSED: | |
1054 case LOCK_RELEASED: | |
1055 case OPEN_CROSH: | |
1056 case OPEN_FILE_MANAGER: | |
1057 case OPEN_GET_HELP: | |
1058 case POWER_PRESSED: | |
1059 case POWER_RELEASED: | |
1060 case SUSPEND: | 623 case SUSPEND: |
1061 case TOGGLE_MIRROR_MODE: | |
1062 case TOGGLE_SPOKEN_FEEDBACK: | 624 case TOGGLE_SPOKEN_FEEDBACK: |
1063 case TOGGLE_WIFI: | 625 case TOGGLE_WIFI: |
1064 case TOUCH_HUD_PROJECTION_TOGGLE: | |
1065 case VOLUME_DOWN: | 626 case VOLUME_DOWN: |
1066 case VOLUME_MUTE: | 627 case VOLUME_MUTE: |
1067 case VOLUME_UP: | 628 case VOLUME_UP: |
1068 #else | 629 #else |
1069 case DUMMY_FOR_RESERVED: | 630 case DUMMY_FOR_RESERVED: |
1070 #endif | 631 #endif |
1071 return true; | 632 return true; |
| 633 |
| 634 default: |
| 635 // Default switch is temporary until mash transition complete. Needed as |
| 636 // some actions don't yet work with mash. |
| 637 break; |
1072 } | 638 } |
1073 return false; | 639 DCHECK(delegate_ && delegate_->HandlesAction(action)); |
| 640 return delegate_->CanPerformAction(action, accelerator, previous_accelerator); |
1074 } | 641 } |
1075 | 642 |
1076 void AcceleratorController::PerformAction(AcceleratorAction action, | 643 void AcceleratorController::PerformAction(AcceleratorAction action, |
1077 const ui::Accelerator& accelerator) { | 644 const ui::Accelerator& accelerator) { |
1078 AcceleratorProcessingRestriction restriction = | 645 AcceleratorProcessingRestriction restriction = |
1079 GetAcceleratorProcessingRestriction(action); | 646 GetAcceleratorProcessingRestriction(action); |
1080 if (restriction != RESTRICTION_NONE) | 647 if (restriction != RESTRICTION_NONE) |
1081 return; | 648 return; |
1082 | 649 |
1083 // If your accelerator invokes more than one line of code, please either | 650 // If your accelerator invokes more than one line of code, please either |
1084 // implement it in your module's controller code (like TOGGLE_MIRROR_MODE | 651 // implement it in your module's controller code or pull it into a HandleFoo() |
1085 // below) or pull it into a HandleFoo() function above. | 652 // function above. |
1086 switch (action) { | 653 switch (action) { |
1087 case CYCLE_BACKWARD_MRU: | 654 case CYCLE_BACKWARD_MRU: |
1088 HandleCycleBackwardMRU(accelerator); | 655 HandleCycleBackwardMRU(accelerator); |
1089 break; | 656 break; |
1090 case CYCLE_FORWARD_MRU: | 657 case CYCLE_FORWARD_MRU: |
1091 HandleCycleForwardMRU(accelerator); | 658 HandleCycleForwardMRU(accelerator); |
1092 break; | 659 break; |
1093 case DEBUG_PRINT_LAYER_HIERARCHY: | 660 case DEBUG_PRINT_LAYER_HIERARCHY: |
1094 case DEBUG_PRINT_VIEW_HIERARCHY: | 661 case DEBUG_PRINT_VIEW_HIERARCHY: |
1095 case DEBUG_PRINT_WINDOW_HIERARCHY: | 662 case DEBUG_PRINT_WINDOW_HIERARCHY: |
1096 case DEBUG_TOGGLE_DESKTOP_BACKGROUND_MODE: | 663 case DEBUG_TOGGLE_DESKTOP_BACKGROUND_MODE: |
1097 case DEBUG_TOGGLE_DEVICE_SCALE_FACTOR: | 664 case DEBUG_TOGGLE_DEVICE_SCALE_FACTOR: |
1098 case DEBUG_TOGGLE_ROOT_WINDOW_FULL_SCREEN: | 665 case DEBUG_TOGGLE_ROOT_WINDOW_FULL_SCREEN: |
1099 case DEBUG_TOGGLE_SHOW_DEBUG_BORDERS: | 666 case DEBUG_TOGGLE_SHOW_DEBUG_BORDERS: |
1100 case DEBUG_TOGGLE_SHOW_FPS_COUNTER: | 667 case DEBUG_TOGGLE_SHOW_FPS_COUNTER: |
1101 case DEBUG_TOGGLE_SHOW_PAINT_RECTS: | 668 case DEBUG_TOGGLE_SHOW_PAINT_RECTS: |
1102 debug::PerformDebugActionIfEnabled(action); | 669 debug::PerformDebugActionIfEnabled(action); |
1103 break; | 670 break; |
1104 case EXIT: | 671 case EXIT: |
1105 // UMA metrics are recorded in the handler. | 672 // UMA metrics are recorded in the handler. |
1106 exit_warning_handler_.HandleAccelerator(); | 673 exit_warning_handler_.HandleAccelerator(); |
1107 break; | 674 break; |
1108 case FOCUS_NEXT_PANE: | 675 case FOCUS_NEXT_PANE: |
1109 HandleRotatePaneFocus(FocusCycler::FORWARD); | 676 HandleRotatePaneFocus(FocusCycler::FORWARD); |
1110 break; | 677 break; |
1111 case FOCUS_PREVIOUS_PANE: | 678 case FOCUS_PREVIOUS_PANE: |
1112 HandleRotatePaneFocus(FocusCycler::BACKWARD); | 679 HandleRotatePaneFocus(FocusCycler::BACKWARD); |
1113 break; | 680 break; |
1114 case FOCUS_SHELF: | |
1115 HandleFocusShelf(); | |
1116 break; | |
1117 case LAUNCH_APP_0: | |
1118 HandleLaunchAppN(0); | |
1119 break; | |
1120 case LAUNCH_APP_1: | |
1121 HandleLaunchAppN(1); | |
1122 break; | |
1123 case LAUNCH_APP_2: | |
1124 HandleLaunchAppN(2); | |
1125 break; | |
1126 case LAUNCH_APP_3: | |
1127 HandleLaunchAppN(3); | |
1128 break; | |
1129 case LAUNCH_APP_4: | |
1130 HandleLaunchAppN(4); | |
1131 break; | |
1132 case LAUNCH_APP_5: | |
1133 HandleLaunchAppN(5); | |
1134 break; | |
1135 case LAUNCH_APP_6: | |
1136 HandleLaunchAppN(6); | |
1137 break; | |
1138 case LAUNCH_APP_7: | |
1139 HandleLaunchAppN(7); | |
1140 break; | |
1141 case LAUNCH_LAST_APP: | |
1142 HandleLaunchLastApp(); | |
1143 break; | |
1144 case MAGNIFY_SCREEN_ZOOM_IN: | |
1145 HandleMagnifyScreen(1); | |
1146 break; | |
1147 case MAGNIFY_SCREEN_ZOOM_OUT: | |
1148 HandleMagnifyScreen(-1); | |
1149 break; | |
1150 case MEDIA_NEXT_TRACK: | 681 case MEDIA_NEXT_TRACK: |
1151 HandleMediaNextTrack(); | 682 HandleMediaNextTrack(); |
1152 break; | 683 break; |
1153 case MEDIA_PLAY_PAUSE: | 684 case MEDIA_PLAY_PAUSE: |
1154 HandleMediaPlayPause(); | 685 HandleMediaPlayPause(); |
1155 break; | 686 break; |
1156 case MEDIA_PREV_TRACK: | 687 case MEDIA_PREV_TRACK: |
1157 HandleMediaPrevTrack(); | 688 HandleMediaPrevTrack(); |
1158 break; | 689 break; |
1159 case NEW_INCOGNITO_WINDOW: | |
1160 HandleNewIncognitoWindow(); | |
1161 break; | |
1162 case NEW_TAB: | |
1163 HandleNewTab(accelerator); | |
1164 break; | |
1165 case NEW_WINDOW: | |
1166 HandleNewWindow(); | |
1167 break; | |
1168 case NEXT_IME: | 690 case NEXT_IME: |
1169 HandleNextIme(ime_control_delegate_.get()); | 691 HandleNextIme(ime_control_delegate_.get()); |
1170 break; | 692 break; |
1171 case OPEN_FEEDBACK_PAGE: | |
1172 HandleOpenFeedbackPage(); | |
1173 break; | |
1174 case PREVIOUS_IME: | 693 case PREVIOUS_IME: |
1175 HandlePreviousIme(ime_control_delegate_.get(), accelerator); | 694 HandlePreviousIme(ime_control_delegate_.get(), accelerator); |
1176 break; | 695 break; |
1177 case PRINT_UI_HIERARCHIES: | 696 case PRINT_UI_HIERARCHIES: |
1178 debug::PrintUIHierarchies(); | 697 debug::PrintUIHierarchies(); |
1179 break; | 698 break; |
1180 case RESTORE_TAB: | |
1181 HandleRestoreTab(); | |
1182 break; | |
1183 case ROTATE_SCREEN: | |
1184 HandleRotateScreen(); | |
1185 break; | |
1186 case ROTATE_WINDOW: | |
1187 HandleRotateActiveWindow(); | |
1188 break; | |
1189 case SCALE_UI_DOWN: | |
1190 accelerators::ZoomInternalDisplay(false /* down */); | |
1191 break; | |
1192 case SCALE_UI_RESET: | |
1193 accelerators::ResetInternalDisplayZoom(); | |
1194 break; | |
1195 case SCALE_UI_UP: | |
1196 accelerators::ZoomInternalDisplay(true /* up */); | |
1197 break; | |
1198 case SHOW_KEYBOARD_OVERLAY: | |
1199 HandleShowKeyboardOverlay(); | |
1200 break; | |
1201 case SHOW_MESSAGE_CENTER_BUBBLE: | |
1202 HandleShowMessageCenterBubble(); | |
1203 break; | |
1204 case SHOW_SYSTEM_TRAY_BUBBLE: | |
1205 HandleShowSystemTrayBubble(); | |
1206 break; | |
1207 case SHOW_TASK_MANAGER: | |
1208 HandleShowTaskManager(); | |
1209 break; | |
1210 case SWITCH_IME: | 699 case SWITCH_IME: |
1211 HandleSwitchIme(ime_control_delegate_.get(), accelerator); | 700 HandleSwitchIme(ime_control_delegate_.get(), accelerator); |
1212 break; | 701 break; |
1213 case TAKE_WINDOW_SCREENSHOT: | |
1214 HandleTakeWindowScreenshot(screenshot_delegate_.get()); | |
1215 break; | |
1216 case TAKE_PARTIAL_SCREENSHOT: | |
1217 HandleTakePartialScreenshot(screenshot_delegate_.get()); | |
1218 break; | |
1219 case TAKE_SCREENSHOT: | |
1220 HandleTakeScreenshot(screenshot_delegate_.get()); | |
1221 break; | |
1222 case TOGGLE_APP_LIST: | |
1223 HandleToggleAppList(accelerator); | |
1224 break; | |
1225 case TOGGLE_FULLSCREEN: | 702 case TOGGLE_FULLSCREEN: |
1226 HandleToggleFullscreen(accelerator); | 703 HandleToggleFullscreen(accelerator); |
1227 break; | 704 break; |
1228 case TOGGLE_MAXIMIZED: | 705 case TOGGLE_MAXIMIZED: |
1229 accelerators::ToggleMaximized(); | 706 accelerators::ToggleMaximized(); |
1230 break; | 707 break; |
1231 case TOGGLE_OVERVIEW: | 708 case TOGGLE_OVERVIEW: |
1232 HandleToggleOverview(); | 709 HandleToggleOverview(); |
1233 break; | 710 break; |
1234 case WINDOW_CYCLE_SNAP_DOCK_LEFT: | 711 case WINDOW_CYCLE_SNAP_DOCK_LEFT: |
1235 case WINDOW_CYCLE_SNAP_DOCK_RIGHT: | 712 case WINDOW_CYCLE_SNAP_DOCK_RIGHT: |
1236 HandleWindowSnapOrDock(action); | 713 HandleWindowSnapOrDock(action); |
1237 break; | 714 break; |
1238 case WINDOW_MINIMIZE: | 715 case WINDOW_MINIMIZE: |
1239 HandleWindowMinimize(); | 716 HandleWindowMinimize(); |
1240 break; | 717 break; |
1241 case WINDOW_POSITION_CENTER: | 718 case WINDOW_POSITION_CENTER: |
1242 HandlePositionCenter(); | 719 HandlePositionCenter(); |
1243 break; | 720 break; |
1244 case UNPIN: | |
1245 HandleUnpin(); | |
1246 break; | |
1247 #if defined(OS_CHROMEOS) | 721 #if defined(OS_CHROMEOS) |
1248 case BRIGHTNESS_DOWN: { | 722 case BRIGHTNESS_DOWN: { |
1249 BrightnessControlDelegate* delegate = | 723 BrightnessControlDelegate* delegate = |
1250 WmShell::Get()->brightness_control_delegate(); | 724 WmShell::Get()->brightness_control_delegate(); |
1251 if (delegate) | 725 if (delegate) |
1252 delegate->HandleBrightnessDown(accelerator); | 726 delegate->HandleBrightnessDown(accelerator); |
1253 break; | 727 break; |
1254 } | 728 } |
1255 case BRIGHTNESS_UP: { | 729 case BRIGHTNESS_UP: { |
1256 BrightnessControlDelegate* delegate = | 730 BrightnessControlDelegate* delegate = |
1257 WmShell::Get()->brightness_control_delegate(); | 731 WmShell::Get()->brightness_control_delegate(); |
1258 if (delegate) | 732 if (delegate) |
1259 delegate->HandleBrightnessUp(accelerator); | 733 delegate->HandleBrightnessUp(accelerator); |
1260 break; | 734 break; |
1261 } | 735 } |
1262 case DEBUG_ADD_REMOVE_DISPLAY: | 736 case DEBUG_ADD_REMOVE_DISPLAY: |
1263 case DEBUG_SHOW_TOAST: | 737 case DEBUG_SHOW_TOAST: |
1264 case DEBUG_TOGGLE_TOUCH_PAD: | 738 case DEBUG_TOGGLE_TOUCH_PAD: |
1265 case DEBUG_TOGGLE_TOUCH_SCREEN: | 739 case DEBUG_TOGGLE_TOUCH_SCREEN: |
1266 case DEBUG_TOGGLE_TOUCH_VIEW: | 740 case DEBUG_TOGGLE_TOUCH_VIEW: |
1267 case DEBUG_TOGGLE_UNIFIED_DESKTOP: | 741 case DEBUG_TOGGLE_UNIFIED_DESKTOP: |
1268 debug::PerformDebugActionIfEnabled(action); | 742 debug::PerformDebugActionIfEnabled(action); |
1269 break; | 743 break; |
1270 case DISABLE_CAPS_LOCK: | 744 case DISABLE_CAPS_LOCK: |
1271 HandleDisableCapsLock(); | 745 HandleDisableCapsLock(); |
1272 break; | 746 break; |
1273 case DISABLE_GPU_WATCHDOG: | |
1274 Shell::GetInstance()->gpu_support()->DisableGpuWatchdog(); | |
1275 break; | |
1276 case KEYBOARD_BRIGHTNESS_DOWN: { | 747 case KEYBOARD_BRIGHTNESS_DOWN: { |
1277 KeyboardBrightnessControlDelegate* delegate = | 748 KeyboardBrightnessControlDelegate* delegate = |
1278 WmShell::Get()->keyboard_brightness_control_delegate(); | 749 WmShell::Get()->keyboard_brightness_control_delegate(); |
1279 if (delegate) | 750 if (delegate) |
1280 delegate->HandleKeyboardBrightnessDown(accelerator); | 751 delegate->HandleKeyboardBrightnessDown(accelerator); |
1281 break; | 752 break; |
1282 } | 753 } |
1283 case KEYBOARD_BRIGHTNESS_UP: { | 754 case KEYBOARD_BRIGHTNESS_UP: { |
1284 KeyboardBrightnessControlDelegate* delegate = | 755 KeyboardBrightnessControlDelegate* delegate = |
1285 WmShell::Get()->keyboard_brightness_control_delegate(); | 756 WmShell::Get()->keyboard_brightness_control_delegate(); |
1286 if (delegate) | 757 if (delegate) |
1287 delegate->HandleKeyboardBrightnessUp(accelerator); | 758 delegate->HandleKeyboardBrightnessUp(accelerator); |
1288 break; | 759 break; |
1289 } | 760 } |
1290 case LOCK_PRESSED: | |
1291 case LOCK_RELEASED: | |
1292 Shell::GetInstance()->power_button_controller()->OnLockButtonEvent( | |
1293 action == LOCK_PRESSED, base::TimeTicks()); | |
1294 break; | |
1295 case LOCK_SCREEN: | 761 case LOCK_SCREEN: |
1296 HandleLock(); | 762 HandleLock(); |
1297 break; | 763 break; |
1298 case OPEN_CROSH: | |
1299 HandleCrosh(); | |
1300 break; | |
1301 case OPEN_FILE_MANAGER: | |
1302 HandleFileManager(); | |
1303 break; | |
1304 case OPEN_GET_HELP: | |
1305 HandleGetHelp(); | |
1306 break; | |
1307 case POWER_PRESSED: // fallthrough | |
1308 case POWER_RELEASED: | |
1309 if (!base::SysInfo::IsRunningOnChromeOS()) { | |
1310 // There is no powerd, the Chrome OS power manager, in linux desktop, | |
1311 // so call the PowerButtonController here. | |
1312 Shell::GetInstance()->power_button_controller()->OnPowerButtonEvent( | |
1313 action == POWER_PRESSED, base::TimeTicks()); | |
1314 } | |
1315 // We don't do anything with these at present on the device, | |
1316 // (power button events are reported to us from powerm via | |
1317 // D-BUS), but we consume them to prevent them from getting | |
1318 // passed to apps -- see http://crbug.com/146609. | |
1319 break; | |
1320 case SUSPEND: | 764 case SUSPEND: |
1321 HandleSuspend(); | 765 HandleSuspend(); |
1322 break; | 766 break; |
1323 case SWAP_PRIMARY_DISPLAY: | |
1324 HandleSwapPrimaryDisplay(); | |
1325 break; | |
1326 case SWITCH_TO_NEXT_USER: | 767 case SWITCH_TO_NEXT_USER: |
1327 HandleCycleUser(SessionStateDelegate::CYCLE_TO_NEXT_USER); | 768 HandleCycleUser(SessionStateDelegate::CYCLE_TO_NEXT_USER); |
1328 break; | 769 break; |
1329 case SWITCH_TO_PREVIOUS_USER: | 770 case SWITCH_TO_PREVIOUS_USER: |
1330 HandleCycleUser(SessionStateDelegate::CYCLE_TO_PREVIOUS_USER); | 771 HandleCycleUser(SessionStateDelegate::CYCLE_TO_PREVIOUS_USER); |
1331 break; | 772 break; |
1332 case TOGGLE_CAPS_LOCK: | 773 case TOGGLE_CAPS_LOCK: |
1333 HandleToggleCapsLock(); | 774 HandleToggleCapsLock(); |
1334 break; | 775 break; |
1335 case TOGGLE_MIRROR_MODE: | |
1336 HandleToggleMirrorMode(); | |
1337 break; | |
1338 case TOGGLE_SPOKEN_FEEDBACK: | 776 case TOGGLE_SPOKEN_FEEDBACK: |
1339 HandleToggleSpokenFeedback(); | 777 HandleToggleSpokenFeedback(); |
1340 break; | 778 break; |
1341 case TOGGLE_WIFI: | 779 case TOGGLE_WIFI: |
1342 WmShell::Get()->system_tray_notifier()->NotifyRequestToggleWifi(); | 780 WmShell::Get()->system_tray_notifier()->NotifyRequestToggleWifi(); |
1343 break; | 781 break; |
1344 case TOUCH_HUD_CLEAR: | |
1345 HandleTouchHudClear(); | |
1346 break; | |
1347 case TOUCH_HUD_MODE_CHANGE: | |
1348 HandleTouchHudModeChange(); | |
1349 break; | |
1350 case TOUCH_HUD_PROJECTION_TOGGLE: | |
1351 accelerators::ToggleTouchHudProjection(); | |
1352 break; | |
1353 case VOLUME_DOWN: | 782 case VOLUME_DOWN: |
1354 HandleVolumeDown(accelerator); | 783 HandleVolumeDown(accelerator); |
1355 break; | 784 break; |
1356 case VOLUME_MUTE: | 785 case VOLUME_MUTE: |
1357 HandleVolumeMute(accelerator); | 786 HandleVolumeMute(accelerator); |
1358 break; | 787 break; |
1359 case VOLUME_UP: | 788 case VOLUME_UP: |
1360 HandleVolumeUp(accelerator); | 789 HandleVolumeUp(accelerator); |
1361 break; | 790 break; |
1362 #else | 791 #else |
1363 case DUMMY_FOR_RESERVED: | 792 case DUMMY_FOR_RESERVED: |
1364 NOTREACHED(); | 793 NOTREACHED(); |
1365 break; | 794 break; |
1366 #endif | 795 #endif |
| 796 default: |
| 797 // Temporary until mash transition complete. Needed as some actions |
| 798 // don't yet work with mash. |
| 799 DCHECK(delegate_ && delegate_->HandlesAction(action)); |
| 800 delegate_->PerformAction(action, accelerator); |
| 801 break; |
1367 } | 802 } |
1368 } | 803 } |
1369 | 804 |
1370 bool AcceleratorController::ShouldActionConsumeKeyEvent( | 805 bool AcceleratorController::ShouldActionConsumeKeyEvent( |
1371 AcceleratorAction action) { | 806 AcceleratorAction action) { |
1372 // Adding new exceptions is *STRONGLY* discouraged. | 807 // Adding new exceptions is *STRONGLY* discouraged. |
1373 return true; | 808 return true; |
1374 } | 809 } |
1375 | 810 |
1376 AcceleratorController::AcceleratorProcessingRestriction | 811 AcceleratorController::AcceleratorProcessingRestriction |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1408 if (wm_shell->mru_window_tracker()->BuildMruWindowList().empty() && | 843 if (wm_shell->mru_window_tracker()->BuildMruWindowList().empty() && |
1409 actions_needing_window_.find(action) != actions_needing_window_.end()) { | 844 actions_needing_window_.find(action) != actions_needing_window_.end()) { |
1410 wm_shell->accessibility_delegate()->TriggerAccessibilityAlert( | 845 wm_shell->accessibility_delegate()->TriggerAccessibilityAlert( |
1411 A11Y_ALERT_WINDOW_NEEDED); | 846 A11Y_ALERT_WINDOW_NEEDED); |
1412 return RESTRICTION_PREVENT_PROCESSING_AND_PROPAGATION; | 847 return RESTRICTION_PREVENT_PROCESSING_AND_PROPAGATION; |
1413 } | 848 } |
1414 return RESTRICTION_NONE; | 849 return RESTRICTION_NONE; |
1415 } | 850 } |
1416 | 851 |
1417 } // namespace ash | 852 } // namespace ash |
OLD | NEW |