Index: athena/screen/screen_manager_impl.cc |
diff --git a/athena/screen/screen_manager_impl.cc b/athena/screen/screen_manager_impl.cc |
index 166055cf70b2d40098a6976abaf8a91657fab2f6..a154d522f2edcec74117a63d3aacab35e7fd2054 100644 |
--- a/athena/screen/screen_manager_impl.cc |
+++ b/athena/screen/screen_manager_impl.cc |
@@ -8,7 +8,6 @@ |
#include "athena/common/fill_layout_manager.h" |
#include "athena/input/public/accelerator_manager.h" |
#include "athena/screen/background_controller.h" |
-#include "athena/screen/public/screen_manager_delegate.h" |
#include "athena/screen/screen_accelerator_handler.h" |
#include "base/logging.h" |
#include "base/memory/scoped_ptr.h" |
@@ -25,6 +24,7 @@ |
#include "ui/gfx/screen.h" |
#include "ui/wm/core/base_focus_rules.h" |
#include "ui/wm/core/capture_controller.h" |
+#include "ui/wm/core/focus_controller.h" |
namespace athena { |
namespace { |
@@ -192,14 +192,13 @@ class AthenaEventTargeter : public aura::WindowTargeter, |
class ScreenManagerImpl : public ScreenManager { |
public: |
- ScreenManagerImpl(ScreenManagerDelegate* delegate, aura::Window* root_window); |
+ ScreenManagerImpl(aura::Window* root_window); |
virtual ~ScreenManagerImpl(); |
void Init(); |
private: |
// ScreenManager: |
- virtual void SetWorkAreaInsets(const gfx::Insets& insets) OVERRIDE; |
virtual aura::Window* CreateDefaultContainer( |
const ContainerParams& params) OVERRIDE; |
virtual aura::Window* CreateContainer(const ContainerParams& params) OVERRIDE; |
@@ -209,10 +208,10 @@ class ScreenManagerImpl : public ScreenManager { |
virtual ui::LayerAnimator* GetScreenAnimator() OVERRIDE; |
// Not owned. |
- ScreenManagerDelegate* delegate_; |
aura::Window* root_window_; |
aura::Window* background_window_; |
+ scoped_ptr<aura::client::FocusClient> focus_client_; |
scoped_ptr<BackgroundController> background_controller_; |
scoped_ptr<aura::client::WindowTreeClient> window_tree_client_; |
scoped_ptr<AcceleratorHandler> accelerator_handler_; |
@@ -222,10 +221,8 @@ class ScreenManagerImpl : public ScreenManager { |
DISALLOW_COPY_AND_ASSIGN(ScreenManagerImpl); |
}; |
-ScreenManagerImpl::ScreenManagerImpl(ScreenManagerDelegate* delegate, |
- aura::Window* root_window) |
- : delegate_(delegate), |
- root_window_(root_window) { |
+ScreenManagerImpl::ScreenManagerImpl(aura::Window* root_window) |
+ : root_window_(root_window) { |
DCHECK(root_window_); |
DCHECK(!instance); |
instance = this; |
@@ -234,10 +231,23 @@ ScreenManagerImpl::ScreenManagerImpl(ScreenManagerDelegate* delegate, |
ScreenManagerImpl::~ScreenManagerImpl() { |
aura::client::SetScreenPositionClient(root_window_, NULL); |
aura::client::SetWindowTreeClient(root_window_, NULL); |
+ wm::FocusController* focus_controller = |
+ static_cast<wm::FocusController*>(focus_client_.get()); |
+ root_window_->RemovePreTargetHandler(focus_controller); |
+ aura::client::SetActivationClient(root_window_, NULL); |
+ aura::client::SetFocusClient(root_window_, NULL); |
instance = NULL; |
} |
void ScreenManagerImpl::Init() { |
+ wm::FocusController* focus_controller = |
+ new wm::FocusController(new AthenaFocusRules()); |
+ |
+ aura::client::SetFocusClient(root_window_, focus_controller); |
+ root_window_->AddPreTargetHandler(focus_controller); |
+ aura::client::SetActivationClient(root_window_, focus_controller); |
+ focus_client_.reset(focus_controller); |
+ |
// TODO(oshima): Move the background out from ScreenManager. |
root_window_->SetLayoutManager(new FillLayoutManager(root_window_)); |
background_window_ = |
@@ -251,10 +261,6 @@ void ScreenManagerImpl::Init() { |
accelerator_handler_.reset(new ScreenAcceleratorHandler(root_window_)); |
} |
-void ScreenManagerImpl::SetWorkAreaInsets(const gfx::Insets& insets) { |
- delegate_->SetWorkAreaInsets(insets); |
-} |
- |
aura::Window* ScreenManagerImpl::CreateDefaultContainer( |
const ContainerParams& params) { |
aura::Window* container = CreateContainer(params); |
@@ -365,9 +371,8 @@ ScreenManager::ContainerParams::ContainerParams(const std::string& n, |
} |
// static |
-ScreenManager* ScreenManager::Create(ScreenManagerDelegate* delegate, |
- aura::Window* root_window) { |
- (new ScreenManagerImpl(delegate, root_window))->Init(); |
+ScreenManager* ScreenManager::Create(aura::Window* root_window) { |
+ (new ScreenManagerImpl(root_window))->Init(); |
DCHECK(instance); |
return instance; |
} |
@@ -385,9 +390,4 @@ void ScreenManager::Shutdown() { |
DCHECK(!instance); |
} |
-// static |
-wm::FocusRules* ScreenManager::CreateFocusRules() { |
- return new AthenaFocusRules(); |
-} |
- |
} // namespace athena |