Index: ash/shell.cc |
diff --git a/ash/shell.cc b/ash/shell.cc |
index bc8829a1fa9de4936c7361af2d090eb71d965a84..617cc8a56051a12f6330389e92aa6f4627b03cad 100644 |
--- a/ash/shell.cc |
+++ b/ash/shell.cc |
@@ -6,6 +6,7 @@ |
#include <algorithm> |
+#include "ash/accelerators/accelerator_table.h" |
#include "ash/app_list/app_list.h" |
#include "ash/ash_switches.h" |
#include "ash/desktop_background/desktop_background_controller.h" |
@@ -70,12 +71,15 @@ |
#include "ui/aura/root_window.h" |
#include "ui/aura/ui_controls_aura.h" |
#include "ui/aura/window.h" |
+#include "ui/base/accelerators/accelerator_manager.h" |
#include "ui/compositor/layer.h" |
#include "ui/compositor/layer_animator.h" |
#include "ui/gfx/monitor.h" |
#include "ui/gfx/screen.h" |
#include "ui/gfx/size.h" |
#include "ui/ui_controls/ui_controls.h" |
+#include "ui/views/focus/focus_manager_delegate.h" |
+#include "ui/views/focus/focus_manager_factory.h" |
#include "ui/views/widget/native_widget_aura.h" |
#include "ui/views/widget/widget.h" |
@@ -498,6 +502,46 @@ class DummySystemTrayDelegate : public SystemTrayDelegate { |
DISALLOW_COPY_AND_ASSIGN(DummySystemTrayDelegate); |
}; |
+class AshFocusManagerFactory : public views::FocusManagerFactory { |
Ben Goodger (Google)
2012/05/07 15:42:51
Can we move this closer to the accelerators stuff
Yusuke Sato
2012/05/08 02:15:57
Done.
|
+ public: |
+ AshFocusManagerFactory() {} |
+ virtual ~AshFocusManagerFactory() {} |
+ |
+ protected: |
+ virtual views::FocusManager* CreateFocusManager(Widget* widget) OVERRIDE { |
+ return new views::FocusManager(widget, new Delegate); |
+ } |
+ |
+ private: |
+ class Delegate : public views::FocusManagerDelegate { |
+ public: |
+ // views::FocusManagerDelegate overrides: |
+ virtual bool ProcessAccelerator( |
+ const ui::Accelerator& accelerator) OVERRIDE { |
+#if !defined(OS_MACOSX) |
Ben Goodger (Google)
2012/05/07 15:42:51
dhollowa has become distracted from implementing M
Yusuke Sato
2012/05/08 02:15:57
Done.
|
+ AcceleratorController* controller = |
+ Shell::GetInstance()->accelerator_controller(); |
+ if (controller) |
+ return controller->Process(accelerator); |
+#endif |
+ return false; |
+ } |
+ |
+ virtual ui::AcceleratorTarget* GetCurrentTargetForAccelerator( |
+ const ui::Accelerator& accelerator) const OVERRIDE { |
+#if !defined(OS_MACOSX) |
+ AcceleratorController* controller = |
+ Shell::GetInstance()->accelerator_controller(); |
+ if (controller && controller->IsRegistered(accelerator)) |
+ return controller; |
+#endif |
+ return NULL; |
+ } |
+ }; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(AshFocusManagerFactory); |
+}; |
+ |
} // namespace |
// static |
@@ -543,6 +587,8 @@ Shell::Shell(ShellDelegate* delegate) |
} |
Shell::~Shell() { |
+ views::FocusManagerFactory::Install(NULL); |
+ |
RemoveRootWindowEventFilter(key_rewriter_filter_.get()); |
RemoveRootWindowEventFilter(partial_screenshot_filter_.get()); |
RemoveRootWindowEventFilter(input_method_filter_.get()); |
@@ -741,6 +787,8 @@ void Shell::Init() { |
window_cycle_controller_.reset(new WindowCycleController); |
monitor_controller_.reset(new internal::MonitorController); |
screen_dimmer_.reset(new internal::ScreenDimmer); |
+ |
+ views::FocusManagerFactory::Install(new AshFocusManagerFactory); |
} |
aura::Window* Shell::GetContainer(int container_id) { |