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

Side by Side Diff: ui/aura_shell/shell_accelerator_controller.cc

Issue 8689003: Register global accelerators and add placeholders for handling them. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "ui/aura_shell/shell_accelerator_controller.h" 5 #include "ui/aura_shell/shell_accelerator_controller.h"
6 6
7 #include "base/logging.h"
7 #include "ui/aura/desktop.h" 8 #include "ui/aura/desktop.h"
8 #include "ui/aura/event.h" 9 #include "ui/aura/event.h"
9 #include "ui/aura_shell/shell.h" 10 #include "ui/aura_shell/shell.h"
10 #include "ui/base/accelerator_manager.h" 11 #include "ui/base/accelerator_manager.h"
11 #include "ui/base/models/accelerator.h" 12 #include "ui/base/models/accelerator.h"
12 #include "ui/gfx/compositor/layer_animation_sequence.h" 13 #include "ui/gfx/compositor/layer_animation_sequence.h"
13 #include "ui/gfx/compositor/layer_animator.h" 14 #include "ui/gfx/compositor/layer_animator.h"
14 #include "ui/gfx/compositor/screen_rotation.h" 15 #include "ui/gfx/compositor/screen_rotation.h"
15 16
16 namespace { 17 namespace {
17 18
19 enum AcceleratorAction {
20 kActivateBrowserByIndex,
21 kActivateLastBrowser,
22 kCloseFocusedNonChromeWindow,
23 kCycleBackward,
24 kCycleFowrard,
25 kLaunchTerminal,
26 kResizeLeft,
27 kResizeRight,
28 kTakeRegionScreenshot,
29 kTakeRootScreenshot,
30 kToggleMaximized,
Daniel Erat 2011/11/28 16:39:54 many of these are related to UI that i don't think
mazda 2011/11/29 15:19:35 OK. I hold off most of them for now. We also need
Daniel Erat 2011/11/29 16:46:00 yeah, i'm okay with leaving screenshot-taking in s
31 #if !defined(NDEBUG)
32 kRotateScreen,
33 kToggleClientWindowDebugging,
34 kToggleDamageDebugging,
35 kToggleFullScreen,
36 kToggleProfiler,
Daniel Erat 2011/11/28 16:39:54 kToggleClientWindowDebugging, kToggleDamageDebuggi
mazda 2011/11/29 15:19:35 Done.
37 #endif
38 };
39
18 // Acceleraters handled by ShellAcceleratorController. 40 // Acceleraters handled by ShellAcceleratorController.
19 struct AcceleratorData { 41 struct AcceleratorData {
20 ui::KeyboardCode keycode; 42 ui::KeyboardCode keycode;
21 bool shift; 43 bool shift;
22 bool ctrl; 44 bool ctrl;
23 bool alt; 45 bool alt;
46 AcceleratorAction action;
24 } kAcceleratorData[] = { 47 } kAcceleratorData[] = {
25 { ui::VKEY_F11, false, false, false }, 48 { ui::VKEY_1, false, false, true, kActivateBrowserByIndex },
26 { ui::VKEY_HOME, false, true, false }, 49 { ui::VKEY_2, false, false, true, kActivateBrowserByIndex },
50 { ui::VKEY_3, false, false, true, kActivateBrowserByIndex },
51 { ui::VKEY_4, false, false, true, kActivateBrowserByIndex },
52 { ui::VKEY_5, false, false, true, kActivateBrowserByIndex },
53 { ui::VKEY_6, false, false, true, kActivateBrowserByIndex },
54 { ui::VKEY_7, false, false, true, kActivateBrowserByIndex },
55 { ui::VKEY_8, false, false, true, kActivateBrowserByIndex },
56 { ui::VKEY_9, false, false, true, kActivateLastBrowser },
57 { ui::VKEY_W, true, true, false, kCloseFocusedNonChromeWindow },
58 { ui::VKEY_TAB, true, false, true, kCycleBackward },
59 { ui::VKEY_TAB, false, false, true, kCycleFowrard },
60 { ui::VKEY_T, false, true, true, kLaunchTerminal },
61 { ui::VKEY_OEM_COMMA, false, false, true, kResizeLeft },
62 { ui::VKEY_OEM_PERIOD, false, false, true, kResizeRight },
63 { ui::VKEY_F5, true, true, false, kTakeRegionScreenshot },
64 { ui::VKEY_PRINT, true, false, false, kTakeRegionScreenshot },
65 { ui::VKEY_F5, false, true, false, kTakeRootScreenshot },
66 { ui::VKEY_PRINT, false, false, false, kTakeRootScreenshot },
67 { ui::VKEY_F5, false, false, false, kToggleMaximized },
68 #if !defined(NDEBUG)
69 { ui::VKEY_HOME, false, true, false, kRotateScreen },
70 { ui::VKEY_W, true, true, true, kToggleClientWindowDebugging },
71 { ui::VKEY_D, true, true, true, kToggleDamageDebugging },
72 { ui::VKEY_F11, false, false, false, kToggleFullScreen },
73 { ui::VKEY_P, true, true, true, kToggleProfiler },
74 #endif
27 }; 75 };
28 76
29 // Registers the accelerators with ShellAcceleratorController. 77 bool ActivateBrowserByIndex(int index) {
30 void RegisterAccelerators(aura_shell::ShellAcceleratorController* controller) { 78 NOTIMPLEMENTED();
31 for (size_t i = 0; i < arraysize(kAcceleratorData); ++i) { 79 return false;
32 controller->Register(ui::Accelerator(kAcceleratorData[i].keycode, 80 }
33 kAcceleratorData[i].shift, 81
34 kAcceleratorData[i].ctrl, 82 bool ActivateLastBrowser() {
35 kAcceleratorData[i].alt), 83 NOTIMPLEMENTED();
36 controller); 84 return false;
37 } 85 }
86
87 bool CloseFocusedNonChromeWindow() {
88 NOTIMPLEMENTED();
89 return false;
90 }
91
92 bool CycleBackward() {
93 NOTIMPLEMENTED();
94 return false;
95 }
96
97 bool CycleFowrard() {
Ben Goodger (Google) 2011/11/28 16:40:15 Forward
mazda 2011/11/29 15:19:35 Done.
98 NOTIMPLEMENTED();
99 return false;
100 }
101
102 bool LaunchTerminal() {
103 NOTIMPLEMENTED();
104 return false;
105 }
106
107 bool ResizeLeft() {
108 NOTIMPLEMENTED();
109 return false;
110 }
111
112 bool ResizeRight() {
113 NOTIMPLEMENTED();
114 return false;
115 }
116
117 bool TakeRegionScreenshot() {
118 NOTIMPLEMENTED();
119 return false;
120 }
121
122 bool TakeRootScreenshot() {
123 NOTIMPLEMENTED();
124 return false;
125 }
126
127 bool ToggleMaximized() {
128 NOTIMPLEMENTED();
129 return false;
38 } 130 }
39 131
40 #if !defined(NDEBUG) 132 #if !defined(NDEBUG)
41 // Rotates the screen. 133 // Rotates the screen.
42 void RotateScreen() { 134 bool RotateScreen() {
43 static int i = 0; 135 static int i = 0;
44 int delta = 0; 136 int delta = 0;
45 switch (i) { 137 switch (i) {
46 case 0: delta = 90; break; 138 case 0: delta = 90; break;
47 case 1: delta = 90; break; 139 case 1: delta = 90; break;
48 case 2: delta = 90; break; 140 case 2: delta = 90; break;
49 case 3: delta = 90; break; 141 case 3: delta = 90; break;
50 case 4: delta = -90; break; 142 case 4: delta = -90; break;
51 case 5: delta = -90; break; 143 case 5: delta = -90; break;
52 case 6: delta = -90; break; 144 case 6: delta = -90; break;
53 case 7: delta = -90; break; 145 case 7: delta = -90; break;
54 case 8: delta = -90; break; 146 case 8: delta = -90; break;
55 case 9: delta = 180; break; 147 case 9: delta = 180; break;
56 case 10: delta = 180; break; 148 case 10: delta = 180; break;
57 case 11: delta = 90; break; 149 case 11: delta = 90; break;
58 case 12: delta = 180; break; 150 case 12: delta = 180; break;
59 case 13: delta = 180; break; 151 case 13: delta = 180; break;
60 } 152 }
61 i = (i + 1) % 14; 153 i = (i + 1) % 14;
62 aura::Desktop::GetInstance()->layer()->GetAnimator()->set_preemption_strategy( 154 aura::Desktop::GetInstance()->layer()->GetAnimator()->set_preemption_strategy(
63 ui::LayerAnimator::REPLACE_QUEUED_ANIMATIONS); 155 ui::LayerAnimator::REPLACE_QUEUED_ANIMATIONS);
64 scoped_ptr<ui::LayerAnimationSequence> screen_rotation( 156 scoped_ptr<ui::LayerAnimationSequence> screen_rotation(
65 new ui::LayerAnimationSequence(new ui::ScreenRotation(delta))); 157 new ui::LayerAnimationSequence(new ui::ScreenRotation(delta)));
66 screen_rotation->AddObserver(aura::Desktop::GetInstance()); 158 screen_rotation->AddObserver(aura::Desktop::GetInstance());
67 aura::Desktop::GetInstance()->layer()->GetAnimator()->ScheduleAnimation( 159 aura::Desktop::GetInstance()->layer()->GetAnimator()->ScheduleAnimation(
68 screen_rotation.release()); 160 screen_rotation.release());
161 return true;
162 }
163
164 bool ToggleClientWindowDebugging() {
165 NOTIMPLEMENTED();
166 return false;
167 }
168
169 bool ToggleDamageDebugging() {
170 NOTIMPLEMENTED();
171 return false;
172 }
173
174 bool ToggleFullScreen() {
175 aura::Desktop::GetInstance()->ToggleFullScreen();
176 return true;
177 }
178
179 bool ToggleProfiler() {
180 NOTIMPLEMENTED();
181 return false;
69 } 182 }
70 #endif 183 #endif
71 184
72 } // namespace 185 } // namespace
73 186
74 namespace aura_shell { 187 namespace aura_shell {
75 188
76 //////////////////////////////////////////////////////////////////////////////// 189 ////////////////////////////////////////////////////////////////////////////////
77 // ShellAcceleratorController, public: 190 // ShellAcceleratorController, public:
78 191
79 ShellAcceleratorController::ShellAcceleratorController() 192 ShellAcceleratorController::ShellAcceleratorController()
80 : accelerator_manager_(new ui::AcceleratorManager) { 193 : accelerator_manager_(new ui::AcceleratorManager) {
81 RegisterAccelerators(this); 194 Init();
82 } 195 }
83 196
84 ShellAcceleratorController::~ShellAcceleratorController() { 197 ShellAcceleratorController::~ShellAcceleratorController() {
85 } 198 }
86 199
200 void ShellAcceleratorController::Init() {
201 for (size_t i = 0; i < arraysize(kAcceleratorData); ++i) {
202 ui::Accelerator accelerator(kAcceleratorData[i].keycode,
203 kAcceleratorData[i].shift,
204 kAcceleratorData[i].ctrl,
205 kAcceleratorData[i].alt);
206 Register(accelerator, this);
207 accelerators_.insert(std::make_pair(accelerator,
208 kAcceleratorData[i].action));
209 }
210 }
211
87 void ShellAcceleratorController::Register( 212 void ShellAcceleratorController::Register(
88 const ui::Accelerator& accelerator, 213 const ui::Accelerator& accelerator,
89 ui::AcceleratorTarget* target) { 214 ui::AcceleratorTarget* target) {
90 accelerator_manager_->Register(accelerator, target); 215 accelerator_manager_->Register(accelerator, target);
91 } 216 }
92 217
93 void ShellAcceleratorController::Unregister( 218 void ShellAcceleratorController::Unregister(
94 const ui::Accelerator& accelerator, 219 const ui::Accelerator& accelerator,
95 ui::AcceleratorTarget* target) { 220 ui::AcceleratorTarget* target) {
96 accelerator_manager_->Unregister(accelerator, target); 221 accelerator_manager_->Unregister(accelerator, target);
97 } 222 }
98 223
99 void ShellAcceleratorController::UnregisterAll( 224 void ShellAcceleratorController::UnregisterAll(
100 ui::AcceleratorTarget* target) { 225 ui::AcceleratorTarget* target) {
101 accelerator_manager_->UnregisterAll(target); 226 accelerator_manager_->UnregisterAll(target);
102 } 227 }
103 228
104 bool ShellAcceleratorController::Process(const ui::Accelerator& accelerator) { 229 bool ShellAcceleratorController::Process(const ui::Accelerator& accelerator) {
105 return accelerator_manager_->Process(accelerator); 230 return accelerator_manager_->Process(accelerator);
106 } 231 }
107 232
108 //////////////////////////////////////////////////////////////////////////////// 233 ////////////////////////////////////////////////////////////////////////////////
109 // ShellAcceleratorController, ui::AcceleratorTarget implementation: 234 // ShellAcceleratorController, ui::AcceleratorTarget implementation:
110 235
111 bool ShellAcceleratorController::AcceleratorPressed( 236 bool ShellAcceleratorController::AcceleratorPressed(
112 const ui::Accelerator& accelerator) { 237 const ui::Accelerator& accelerator) {
238 std::map<ui::Accelerator, int>::const_iterator i =
239 accelerators_.find(accelerator);
240 DCHECK(i != accelerators_.end());
241 switch (static_cast<AcceleratorAction>(i->second)) {
242 case kActivateBrowserByIndex:
243 return ActivateBrowserByIndex(accelerator.key_code() - ui::VKEY_1);
244 case kActivateLastBrowser:
245 return ActivateLastBrowser();
246 case kCloseFocusedNonChromeWindow:
247 return CloseFocusedNonChromeWindow();
248 case kCycleBackward:
249 return CycleBackward();
250 case kCycleFowrard:
251 return CycleFowrard();
252 case kLaunchTerminal:
253 return LaunchTerminal();
254 case kResizeLeft:
255 return ResizeLeft();
256 case kResizeRight:
257 return ResizeRight();
258 case kTakeRegionScreenshot:
259 return TakeRegionScreenshot();
260 case kTakeRootScreenshot:
261 return TakeRootScreenshot();
262 case kToggleMaximized:
263 return ToggleMaximized();
113 #if !defined(NDEBUG) 264 #if !defined(NDEBUG)
114 if (accelerator.key_code() == ui::VKEY_F11) { 265 case kRotateScreen:
115 aura::Desktop::GetInstance()->ToggleFullScreen(); 266 return RotateScreen();
116 return true; 267 case kToggleClientWindowDebugging:
117 } else if (accelerator.key_code() == ui::VKEY_HOME && 268 return ToggleClientWindowDebugging();
118 accelerator.IsCtrlDown()) { 269 case kToggleDamageDebugging:
119 RotateScreen(); 270 return ToggleDamageDebugging();
120 return true; 271 case kToggleFullScreen:
272 return ToggleFullScreen();
273 case kToggleProfiler:
274 return ToggleProfiler();
275 #endif
276 default:
277 NOTREACHED();
121 } 278 }
122 #endif
123 return false; 279 return false;
124 } 280 }
125 281
126 } // namespace aura_shell 282 } // namespace aura_shell
OLDNEW
« ui/aura_shell/shell_accelerator_controller.h ('K') | « ui/aura_shell/shell_accelerator_controller.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698