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

Unified Diff: ui/aura/desktop.cc

Issue 8465021: Add ShellAcceleratorController that managers global keyboard accelerators. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Address comments Created 9 years, 1 month 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 side-by-side diff with in-line comments
Download patch
Index: ui/aura/desktop.cc
diff --git a/ui/aura/desktop.cc b/ui/aura/desktop.cc
index 010acf4f3a55d6dca455c4d78cc62f3affcde5b7..60368b60fd0747385c2fede9f512aa294ae2c767 100644
--- a/ui/aura/desktop.cc
+++ b/ui/aura/desktop.cc
@@ -23,6 +23,7 @@
#include "ui/aura/screen_aura.h"
#include "ui/aura/window.h"
#include "ui/aura/window_delegate.h"
+#include "ui/base/accelerator_manager.h"
#include "ui/base/hit_test.h"
#include "ui/gfx/compositor/compositor.h"
#include "ui/gfx/compositor/layer.h"
@@ -44,6 +45,17 @@ static const int kDefaultHostWindowY = 200;
static const int kDefaultHostWindowWidth = 1280;
static const int kDefaultHostWindowHeight = 1024;
+// Acceleraters handled by Desktop.
+struct AcceleratorData {
+ ui::KeyboardCode keycode;
+ bool shift;
+ bool ctrl;
+ bool alt;
+} kAcceleratorData[] = {
+ { ui::VKEY_F11, false, false, false },
+ { ui::VKEY_HOME, false, true, false },
+};
+
// Returns true if |target| has a non-client (frame) component at |location|,
// in window coordinates.
bool IsNonClientLocation(Window* target, const gfx::Point& location) {
@@ -96,46 +108,39 @@ void GetEventFiltersToNotify(Window* target, EventFilters* filters) {
}
#if !defined(NDEBUG)
-bool MaybeFullScreen(DesktopHost* host, KeyEvent* event) {
- if (event->key_code() == ui::VKEY_F11) {
- host->ToggleFullScreen();
- return true;
+bool FullScreen(DesktopHost* host) {
+ host->ToggleFullScreen();
+ return true;
+}
+
+bool Rotate(Desktop* desktop) {
+ static int i = 0;
+ int delta = 0;
+ switch (i) {
+ case 0: delta = 90; break;
+ case 1: delta = 90; break;
+ case 2: delta = 90; break;
+ case 3: delta = 90; break;
+ case 4: delta = -90; break;
+ case 5: delta = -90; break;
+ case 6: delta = -90; break;
+ case 7: delta = -90; break;
+ case 8: delta = -90; break;
+ case 9: delta = 180; break;
+ case 10: delta = 180; break;
+ case 11: delta = 90; break;
+ case 12: delta = 180; break;
+ case 13: delta = 180; break;
}
- return false;
-}
-
-bool MaybeRotate(Desktop* desktop, KeyEvent* event) {
- if ((event->flags() & ui::EF_CONTROL_DOWN) &&
- event->key_code() == ui::VKEY_HOME) {
- static int i = 0;
- int delta = 0;
- switch (i) {
- case 0: delta = 90; break;
- case 1: delta = 90; break;
- case 2: delta = 90; break;
- case 3: delta = 90; break;
- case 4: delta = -90; break;
- case 5: delta = -90; break;
- case 6: delta = -90; break;
- case 7: delta = -90; break;
- case 8: delta = -90; break;
- case 9: delta = 180; break;
- case 10: delta = 180; break;
- case 11: delta = 90; break;
- case 12: delta = 180; break;
- case 13: delta = 180; break;
- }
- i = (i + 1) % 14;
- desktop->layer()->GetAnimator()->set_preemption_strategy(
- ui::LayerAnimator::REPLACE_QUEUED_ANIMATIONS);
- scoped_ptr<ui::LayerAnimationSequence> screen_rotation(
- new ui::LayerAnimationSequence(new ui::ScreenRotation(delta)));
- screen_rotation->AddObserver(desktop);
- desktop->layer()->GetAnimator()->ScheduleAnimation(
- screen_rotation.release());
- return true;
- }
- return false;
+ i = (i + 1) % 14;
+ desktop->layer()->GetAnimator()->set_preemption_strategy(
+ ui::LayerAnimator::REPLACE_QUEUED_ANIMATIONS);
+ scoped_ptr<ui::LayerAnimationSequence> screen_rotation(
+ new ui::LayerAnimationSequence(new ui::ScreenRotation(delta)));
+ screen_rotation->AddObserver(desktop);
+ desktop->layer()->GetAnimator()->ScheduleAnimation(
+ screen_rotation.release());
+ return true;
}
#endif
@@ -274,14 +279,6 @@ bool Desktop::DispatchMouseEvent(MouseEvent* event) {
}
bool Desktop::DispatchKeyEvent(KeyEvent* event) {
-#if !defined(NDEBUG)
- // TODO(beng): replace this hack with global keyboard event handlers.
- if (event->type() == ui::ET_KEY_PRESSED) {
- if (MaybeFullScreen(host_.get(), event) || MaybeRotate(this, event))
- return true;
- }
-#endif
-
if (focused_window_) {
KeyEvent translated_event(*event);
return ProcessKeyEvent(focused_window_, &translated_event);
@@ -411,6 +408,29 @@ bool Desktop::IsMouseButtonDown() const {
return mouse_button_flags_ != 0;
}
+bool Desktop::AcceleratorPressed(const ui::Accelerator& accelerator) {
Ben Goodger (Google) 2011/11/15 16:28:09 We should just move this to the shell now that you
mazda 2011/11/16 05:40:08 Done.
+#if !defined(NDEBUG)
+ if (accelerator.key_code() == ui::VKEY_F11) {
+ return FullScreen(host_.get());
+ } else if (accelerator.key_code() == ui::VKEY_HOME &&
+ accelerator.IsCtrlDown()) {
+ return Rotate(this);
+ }
+#endif
+ return false;
+}
+
+void Desktop::RegisterAccelerators(
+ ui::AcceleratorManager* accelerator_manager) {
+ for (size_t i = 0; i < arraysize(kAcceleratorData); ++i) {
+ accelerator_manager->Register(ui::Accelerator(kAcceleratorData[i].keycode,
+ kAcceleratorData[i].shift,
+ kAcceleratorData[i].ctrl,
+ kAcceleratorData[i].alt),
+ aura::Desktop::GetInstance());
+ }
+}
+
void Desktop::SetCapture(Window* window) {
if (capture_window_ == window)
return;
« ui/aura/desktop.h ('K') | « ui/aura/desktop.h ('k') | ui/aura_shell/aura_shell.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698