Index: ui/aura_shell/shell.cc |
diff --git a/ui/aura_shell/shell.cc b/ui/aura_shell/shell.cc |
index dc40423beb690ee3840f3c19588454a8548f6f58..65d6e8e10aac8b8fa4924feb8335bf00f7f2b820 100644 |
--- a/ui/aura_shell/shell.cc |
+++ b/ui/aura_shell/shell.cc |
@@ -23,6 +23,7 @@ |
#include "ui/aura_shell/toplevel_layout_manager.h" |
#include "ui/aura_shell/toplevel_window_event_filter.h" |
#include "ui/aura_shell/workspace_controller.h" |
+#include "ui/base/accelerator_manager.h" |
#include "ui/gfx/compositor/layer.h" |
#include "ui/gfx/compositor/layer_animator.h" |
#include "views/widget/native_widget_aura.h" |
@@ -34,6 +35,17 @@ namespace { |
using views::Widget; |
+// Acceleraters handled by Shell. |
+struct AcceleratorData { |
+ ui::KeyboardCode keycode; |
+ bool shift; |
+ bool ctrl; |
+ bool alt; |
+} kAcceleratorData[] = { |
+ { ui::VKEY_F11, false, false, false }, |
+ { ui::VKEY_HOME, false, true, false }, |
+}; |
+ |
// Creates each of the special window containers that holds windows of various |
// types in the shell UI. They are added to |containers| from back to front in |
// the z-index. |
@@ -74,6 +86,17 @@ void CreateSpecialContainers(aura::Window::Windows* containers) { |
containers->push_back(menu_container); |
} |
+void RegisterAccelerators(Shell* shell) { |
+ ui::AcceleratorManager* accelerator_manager = shell->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), |
+ shell); |
+ } |
+} |
+ |
} // namespace |
// static |
@@ -84,7 +107,8 @@ Shell* Shell::instance_ = NULL; |
Shell::Shell(ShellDelegate* delegate) |
: ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)), |
- delegate_(delegate) { |
+ delegate_(delegate), |
+ accelerator_manager_(new ui::AcceleratorManager) { |
aura::Desktop::GetInstance()->SetEventFilter( |
new internal::DesktopEventFilter); |
aura::Desktop::GetInstance()->SetStackingClient( |
@@ -167,6 +191,8 @@ void Shell::Init() { |
toplevel_layout_manager->set_shelf(shelf_layout_controller_.get()); |
} |
+ RegisterAccelerators(this); |
+ |
// Force a layout. |
desktop_layout->OnWindowResized(); |
} |
@@ -185,6 +211,20 @@ void Shell::ToggleOverview() { |
workspace_controller_->ToggleOverview(); |
} |
+bool Shell::AcceleratorPressed(const ui::Accelerator& accelerator) { |
+#if !defined(NDEBUG) |
+ if (accelerator.key_code() == ui::VKEY_F11) { |
+ aura::Desktop::GetInstance()->ToggleFullScreen(); |
+ return true; |
+ } else if (accelerator.key_code() == ui::VKEY_HOME && |
+ accelerator.IsCtrlDown()) { |
+ aura::Desktop::GetInstance()->Rotate(); |
+ return true; |
+ } |
+#endif |
+ return false; |
+} |
+ |
//////////////////////////////////////////////////////////////////////////////// |
// Shell, private: |