Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(98)

Side by Side Diff: ash/accelerators/accelerator_controller.cc

Issue 9370017: Move IME shortcut keys from X to Aura [part 1 of 3]. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: re-rebase... Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 "ash/brightness_control_delegate.h" 7 #include "ash/brightness_control_delegate.h"
8 #include "ash/caps_lock_delegate.h" 8 #include "ash/caps_lock_delegate.h"
9 #include "ash/ime_control_delegate.h"
9 #include "ash/launcher/launcher.h" 10 #include "ash/launcher/launcher.h"
10 #include "ash/launcher/launcher_model.h" 11 #include "ash/launcher/launcher_model.h"
11 #include "ash/screenshot_delegate.h" 12 #include "ash/screenshot_delegate.h"
12 #include "ash/shell.h" 13 #include "ash/shell.h"
13 #include "ash/shell_delegate.h" 14 #include "ash/shell_delegate.h"
14 #include "ash/shell_window_ids.h" 15 #include "ash/shell_window_ids.h"
15 #include "ash/volume_control_delegate.h" 16 #include "ash/volume_control_delegate.h"
16 #include "ash/wm/window_cycle_controller.h" 17 #include "ash/wm/window_cycle_controller.h"
17 #include "ash/wm/window_util.h" 18 #include "ash/wm/window_util.h"
18 #include "ui/aura/event.h" 19 #include "ui/aura/event.h"
19 #include "ui/aura/root_window.h" 20 #include "ui/aura/root_window.h"
20 #include "ui/base/accelerators/accelerator.h" 21 #include "ui/base/accelerators/accelerator.h"
21 #include "ui/base/accelerators/accelerator_manager.h" 22 #include "ui/base/accelerators/accelerator_manager.h"
22 #include "ui/gfx/compositor/debug_utils.h" 23 #include "ui/gfx/compositor/debug_utils.h"
23 #include "ui/gfx/compositor/layer_animation_sequence.h" 24 #include "ui/gfx/compositor/layer_animation_sequence.h"
24 #include "ui/gfx/compositor/layer_animator.h" 25 #include "ui/gfx/compositor/layer_animator.h"
25 #include "ui/gfx/compositor/screen_rotation.h" 26 #include "ui/gfx/compositor/screen_rotation.h"
26 27
27 namespace { 28 namespace {
28 29
29 enum AcceleratorAction { 30 enum AcceleratorAction {
30 BRIGHTNESS_DOWN, 31 BRIGHTNESS_DOWN,
31 BRIGHTNESS_UP, 32 BRIGHTNESS_UP,
32 CYCLE_BACKWARD, 33 CYCLE_BACKWARD,
33 CYCLE_FORWARD, 34 CYCLE_FORWARD,
34 EXIT, 35 EXIT,
36 NEXT_IME,
37 PREVIOUS_IME,
38 SWITCH_IME, // Switch to another IME depending on the accelerator.
35 TAKE_SCREENSHOT, 39 TAKE_SCREENSHOT,
36 TAKE_PARTIAL_SCREENSHOT, 40 TAKE_PARTIAL_SCREENSHOT,
37 TOGGLE_CAPS_LOCK, 41 TOGGLE_CAPS_LOCK,
38 VOLUME_DOWN, 42 VOLUME_DOWN,
39 VOLUME_MUTE, 43 VOLUME_MUTE,
40 VOLUME_UP, 44 VOLUME_UP,
41 #if defined(OS_CHROMEOS) 45 #if defined(OS_CHROMEOS)
42 LOCK_SCREEN, 46 LOCK_SCREEN,
43 #endif 47 #endif
44 #if !defined(NDEBUG) 48 #if !defined(NDEBUG)
45 PRINT_LAYER_HIERARCHY, 49 PRINT_LAYER_HIERARCHY,
46 PRINT_WINDOW_HIERARCHY, 50 PRINT_WINDOW_HIERARCHY,
47 ROTATE_SCREEN, 51 ROTATE_SCREEN,
48 TOGGLE_COMPACT_WINDOW_MODE, 52 TOGGLE_COMPACT_WINDOW_MODE,
49 TOGGLE_ROOT_WINDOW_FULL_SCREEN, 53 TOGGLE_ROOT_WINDOW_FULL_SCREEN,
50 #endif 54 #endif
51 }; 55 };
52 56
53 // Accelerators handled by AcceleratorController. 57 // Accelerators handled by AcceleratorController.
54 struct AcceleratorData { 58 const struct AcceleratorData {
59 ui::EventType type;
55 ui::KeyboardCode keycode; 60 ui::KeyboardCode keycode;
56 bool shift; 61 bool shift;
57 bool ctrl; 62 bool ctrl;
58 bool alt; 63 bool alt;
59 AcceleratorAction action; 64 AcceleratorAction action;
60 } kAcceleratorData[] = { 65 } kAcceleratorData[] = {
61 { ui::VKEY_TAB, false, false, true, CYCLE_FORWARD }, 66 // Accelerators that should be processed before a key is sent to an IME.
62 { ui::VKEY_TAB, true, false, true, CYCLE_BACKWARD }, 67 // TODO(yusukes): Handle the NEXT_IME shortcut (Alt+Shift+Release) here.
63 { ui::VKEY_F5, false, false, false, CYCLE_FORWARD }, 68 { ui::ET_KEY_PRESSED, ui::VKEY_SPACE, false, true, false, PREVIOUS_IME },
69 // Shortcuts for Japanese IME.
70 { ui::ET_KEY_PRESSED, ui::VKEY_CONVERT, false, false, false, SWITCH_IME },
71 { ui::ET_KEY_PRESSED, ui::VKEY_NONCONVERT, false, false, false, SWITCH_IME },
72 { ui::ET_KEY_PRESSED, ui::VKEY_DBE_SBCSCHAR, false, false, false,
73 SWITCH_IME },
74 { ui::ET_KEY_PRESSED, ui::VKEY_DBE_DBCSCHAR, false, false, false,
75 SWITCH_IME },
76 // Shortcuts for Koren IME.
77 { ui::ET_KEY_PRESSED, ui::VKEY_HANGUL, false, false, false, SWITCH_IME },
78 { ui::ET_KEY_PRESSED, ui::VKEY_SPACE, true, false, false, SWITCH_IME },
79
80 // Accelerators that should be processed after a key is sent to an IME.
81 { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_TAB, false, false, true,
82 CYCLE_FORWARD },
83 { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_TAB, true, false, true,
84 CYCLE_BACKWARD },
85 { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_F5, false, false, false,
86 CYCLE_FORWARD },
64 #if defined(OS_CHROMEOS) 87 #if defined(OS_CHROMEOS)
65 { ui::VKEY_BRIGHTNESS_DOWN, false, false, false, BRIGHTNESS_DOWN }, 88 { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_BRIGHTNESS_DOWN, false, false, false,
66 { ui::VKEY_BRIGHTNESS_UP, false, false, false, BRIGHTNESS_UP }, 89 BRIGHTNESS_DOWN },
67 { ui::VKEY_L, true, true, false, LOCK_SCREEN }, 90 { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_BRIGHTNESS_UP, false, false, false,
91 BRIGHTNESS_UP },
92 { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_L, true, true, false, LOCK_SCREEN },
68 #endif 93 #endif
69 { ui::VKEY_Q, true, true, false, EXIT }, 94 { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_Q, true, true, false, EXIT },
70 { ui::VKEY_F5, true, false, false, CYCLE_BACKWARD }, 95 { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_F5, true, false, false,
71 { ui::VKEY_F5, false, true, false, TAKE_SCREENSHOT }, 96 CYCLE_BACKWARD },
72 { ui::VKEY_F5, true, true, false, TAKE_PARTIAL_SCREENSHOT }, 97 { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_F5, false, true, false,
73 { ui::VKEY_PRINT, false, false, false, TAKE_SCREENSHOT }, 98 TAKE_SCREENSHOT },
99 { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_F5, true, true, false,
100 TAKE_PARTIAL_SCREENSHOT },
101 { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_PRINT, false, false, false,
102 TAKE_SCREENSHOT },
74 // On Chrome OS, Search key is mapped to LWIN. 103 // On Chrome OS, Search key is mapped to LWIN.
75 { ui::VKEY_LWIN, true, false, false, TOGGLE_CAPS_LOCK }, 104 { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_LWIN, true, false, false,
76 { ui::VKEY_F6, false, false, false, BRIGHTNESS_DOWN }, 105 TOGGLE_CAPS_LOCK },
77 { ui::VKEY_F7, false, false, false, BRIGHTNESS_UP }, 106 { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_F6, false, false, false,
78 { ui::VKEY_F8, false, false, false, VOLUME_MUTE }, 107 BRIGHTNESS_DOWN },
79 { ui::VKEY_VOLUME_MUTE, false, false, false, VOLUME_MUTE }, 108 { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_F7, false, false, false,
80 { ui::VKEY_F9, false, false, false, VOLUME_DOWN }, 109 BRIGHTNESS_UP },
81 { ui::VKEY_VOLUME_DOWN, false, false, false, VOLUME_DOWN }, 110 { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_F8, false, false, false,
82 { ui::VKEY_F10, false, false, false, VOLUME_UP }, 111 VOLUME_MUTE },
83 { ui::VKEY_VOLUME_UP, false, false, false, VOLUME_UP }, 112 { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_VOLUME_MUTE, false, false, false,
113 VOLUME_MUTE },
114 { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_F9, false, false, false,
115 VOLUME_DOWN },
116 { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_VOLUME_DOWN, false, false, false,
117 VOLUME_DOWN },
118 { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_F10, false, false, false, VOLUME_UP },
119 { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_VOLUME_UP, false, false, false,
120 VOLUME_UP },
84 #if !defined(NDEBUG) 121 #if !defined(NDEBUG)
85 { ui::VKEY_HOME, false, true, false, ROTATE_SCREEN }, 122 { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_HOME, false, true, false,
86 { ui::VKEY_A, false, true, true, TOGGLE_COMPACT_WINDOW_MODE }, 123 ROTATE_SCREEN },
87 { ui::VKEY_F11, false, true, false, TOGGLE_ROOT_WINDOW_FULL_SCREEN }, 124 { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_A, false, true, true,
88 { ui::VKEY_L, false, false, true, PRINT_LAYER_HIERARCHY }, 125 TOGGLE_COMPACT_WINDOW_MODE },
89 { ui::VKEY_L, true, false, true, PRINT_WINDOW_HIERARCHY }, 126 { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_F11, false, true, false,
127 TOGGLE_ROOT_WINDOW_FULL_SCREEN },
128 { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_L, false, false, true,
129 PRINT_LAYER_HIERARCHY },
130 { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_L, true, false, true,
131 PRINT_WINDOW_HIERARCHY },
90 // For testing on systems where Alt-Tab is already mapped. 132 // For testing on systems where Alt-Tab is already mapped.
91 { ui::VKEY_W, false, false, true, CYCLE_FORWARD }, 133 { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_W, false, false, true,
92 { ui::VKEY_W, true, false, true, CYCLE_BACKWARD }, 134 CYCLE_FORWARD },
135 { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_W, true, false, true,
136 CYCLE_BACKWARD },
93 #endif 137 #endif
94 }; 138 };
95 139
96 bool HandleCycleWindow(ash::WindowCycleController::Direction direction, 140 bool HandleCycleWindow(ash::WindowCycleController::Direction direction,
97 bool is_alt_down) { 141 bool is_alt_down) {
98 ash::Shell::GetInstance()-> 142 ash::Shell::GetInstance()->
99 window_cycle_controller()->HandleCycleWindow(direction, is_alt_down); 143 window_cycle_controller()->HandleCycleWindow(direction, is_alt_down);
100 // Always report we handled the key, even if the window didn't change. 144 // Always report we handled the key, even if the window didn't change.
101 return true; 145 return true;
102 } 146 }
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 247
204 AcceleratorController::~AcceleratorController() { 248 AcceleratorController::~AcceleratorController() {
205 } 249 }
206 250
207 void AcceleratorController::Init() { 251 void AcceleratorController::Init() {
208 for (size_t i = 0; i < arraysize(kAcceleratorData); ++i) { 252 for (size_t i = 0; i < arraysize(kAcceleratorData); ++i) {
209 ui::Accelerator accelerator(kAcceleratorData[i].keycode, 253 ui::Accelerator accelerator(kAcceleratorData[i].keycode,
210 kAcceleratorData[i].shift, 254 kAcceleratorData[i].shift,
211 kAcceleratorData[i].ctrl, 255 kAcceleratorData[i].ctrl,
212 kAcceleratorData[i].alt); 256 kAcceleratorData[i].alt);
257 accelerator.set_type(kAcceleratorData[i].type);
213 Register(accelerator, this); 258 Register(accelerator, this);
214 accelerators_.insert(std::make_pair(accelerator, 259 CHECK(accelerators_.insert(
215 kAcceleratorData[i].action)); 260 std::make_pair(accelerator, kAcceleratorData[i].action)).second);
216 } 261 }
217 } 262 }
218 263
219 void AcceleratorController::Register( 264 void AcceleratorController::Register(const ui::Accelerator& accelerator,
220 const ui::Accelerator& accelerator, 265 ui::AcceleratorTarget* target) {
221 ui::AcceleratorTarget* target) {
222 accelerator_manager_->Register(accelerator, target); 266 accelerator_manager_->Register(accelerator, target);
223 } 267 }
224 268
225 void AcceleratorController::Unregister( 269 void AcceleratorController::Unregister(const ui::Accelerator& accelerator,
226 const ui::Accelerator& accelerator, 270 ui::AcceleratorTarget* target) {
227 ui::AcceleratorTarget* target) {
228 accelerator_manager_->Unregister(accelerator, target); 271 accelerator_manager_->Unregister(accelerator, target);
229 } 272 }
230 273
231 void AcceleratorController::UnregisterAll( 274 void AcceleratorController::UnregisterAll(ui::AcceleratorTarget* target) {
232 ui::AcceleratorTarget* target) {
233 accelerator_manager_->UnregisterAll(target); 275 accelerator_manager_->UnregisterAll(target);
234 } 276 }
235 277
236 bool AcceleratorController::Process(const ui::Accelerator& accelerator) { 278 bool AcceleratorController::Process(const ui::Accelerator& accelerator) {
237 return accelerator_manager_->Process(accelerator); 279 return accelerator_manager_->Process(accelerator);
238 } 280 }
239 281
240 void AcceleratorController::SetBrightnessControlDelegate( 282 void AcceleratorController::SetBrightnessControlDelegate(
241 scoped_ptr<BrightnessControlDelegate> brightness_control_delegate) { 283 scoped_ptr<BrightnessControlDelegate> brightness_control_delegate) {
242 brightness_control_delegate_.swap(brightness_control_delegate); 284 brightness_control_delegate_.swap(brightness_control_delegate);
243 } 285 }
244 286
245 void AcceleratorController::SetCapsLockDelegate( 287 void AcceleratorController::SetCapsLockDelegate(
246 scoped_ptr<CapsLockDelegate> caps_lock_delegate) { 288 scoped_ptr<CapsLockDelegate> caps_lock_delegate) {
247 caps_lock_delegate_.swap(caps_lock_delegate); 289 caps_lock_delegate_.swap(caps_lock_delegate);
248 } 290 }
249 291
292 void AcceleratorController::SetImeControlDelegate(
293 scoped_ptr<ImeControlDelegate> ime_control_delegate) {
294 ime_control_delegate_.swap(ime_control_delegate);
295 }
296
250 void AcceleratorController::SetScreenshotDelegate( 297 void AcceleratorController::SetScreenshotDelegate(
251 scoped_ptr<ScreenshotDelegate> screenshot_delegate) { 298 scoped_ptr<ScreenshotDelegate> screenshot_delegate) {
252 screenshot_delegate_.swap(screenshot_delegate); 299 screenshot_delegate_.swap(screenshot_delegate);
253 } 300 }
254 301
255 void AcceleratorController::SetVolumeControlDelegate( 302 void AcceleratorController::SetVolumeControlDelegate(
256 scoped_ptr<VolumeControlDelegate> volume_control_delegate) { 303 scoped_ptr<VolumeControlDelegate> volume_control_delegate) {
257 volume_control_delegate_.swap(volume_control_delegate); 304 volume_control_delegate_.swap(volume_control_delegate);
258 } 305 }
259 306
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
309 return volume_control_delegate_->HandleVolumeMute(accelerator); 356 return volume_control_delegate_->HandleVolumeMute(accelerator);
310 break; 357 break;
311 case VOLUME_DOWN: 358 case VOLUME_DOWN:
312 if (volume_control_delegate_.get()) 359 if (volume_control_delegate_.get())
313 return volume_control_delegate_->HandleVolumeDown(accelerator); 360 return volume_control_delegate_->HandleVolumeDown(accelerator);
314 break; 361 break;
315 case VOLUME_UP: 362 case VOLUME_UP:
316 if (volume_control_delegate_.get()) 363 if (volume_control_delegate_.get())
317 return volume_control_delegate_->HandleVolumeUp(accelerator); 364 return volume_control_delegate_->HandleVolumeUp(accelerator);
318 break; 365 break;
366 case NEXT_IME:
367 if (ime_control_delegate_.get())
368 return ime_control_delegate_->HandleNextIme();
369 break;
370 case PREVIOUS_IME:
371 if (ime_control_delegate_.get())
372 return ime_control_delegate_->HandlePreviousIme();
373 break;
374 case SWITCH_IME:
375 if (ime_control_delegate_.get())
376 return ime_control_delegate_->HandleSwitchIme(accelerator);
377 break;
319 #if !defined(NDEBUG) 378 #if !defined(NDEBUG)
320 case ROTATE_SCREEN: 379 case ROTATE_SCREEN:
321 return HandleRotateScreen(); 380 return HandleRotateScreen();
322 case TOGGLE_COMPACT_WINDOW_MODE: 381 case TOGGLE_COMPACT_WINDOW_MODE:
323 return HandleToggleCompactWindowMode(); 382 return HandleToggleCompactWindowMode();
324 case TOGGLE_ROOT_WINDOW_FULL_SCREEN: 383 case TOGGLE_ROOT_WINDOW_FULL_SCREEN:
325 return HandleToggleRootWindowFullScreen(); 384 return HandleToggleRootWindowFullScreen();
326 case PRINT_LAYER_HIERARCHY: 385 case PRINT_LAYER_HIERARCHY:
327 return HandlePrintLayerHierarchy(); 386 return HandlePrintLayerHierarchy();
328 case PRINT_WINDOW_HIERARCHY: 387 case PRINT_WINDOW_HIERARCHY:
329 return HandlePrintWindowHierarchy(); 388 return HandlePrintWindowHierarchy();
330 #endif 389 #endif
331 default: 390 default:
332 NOTREACHED() << "Unhandled action " << it->second;; 391 NOTREACHED() << "Unhandled action " << it->second;;
333 } 392 }
334 return false; 393 return false;
335 } 394 }
336 395
337 bool AcceleratorController::CanHandleAccelerators() const { 396 bool AcceleratorController::CanHandleAccelerators() const {
338 return true; 397 return true;
339 } 398 }
340 399
341 } // namespace ash 400 } // namespace ash
OLDNEW
« no previous file with comments | « ash/accelerators/accelerator_controller.h ('k') | ash/accelerators/accelerator_controller_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698