1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "athena/input/public/input_manager.h" 6 7#include "athena/input/accelerator_manager_impl.h" 8#include "base/logging.h" 9#include "ui/aura/client/event_client.h" 10#include "ui/aura/env.h" 11#include "ui/aura/window.h" 12#include "ui/events/event_target.h" 13 14namespace athena { 15namespace { 16 17InputManager* instance = NULL; 18 19class InputManagerImpl : public InputManager, 20 public ui::EventTarget, 21 public aura::client::EventClient { 22 public: 23 InputManagerImpl(); 24 virtual ~InputManagerImpl(); 25 26 void Init(); 27 void Shutdown(); 28 29 private: 30 // InputManager: 31 virtual void OnRootWindowCreated(aura::Window* root_window) OVERRIDE; 32 virtual ui::EventTarget* GetTopmostEventTarget() OVERRIDE { return this; } 33 virtual AcceleratorManager* GetAcceleratorManager() OVERRIDE { 34 return accelerator_manager_.get(); 35 } 36 37 // Overridden from aura::client::EventClient: 38 virtual bool CanProcessEventsWithinSubtree( 39 const aura::Window* window) const OVERRIDE { 40 return window && !window->ignore_events(); 41 } 42 virtual ui::EventTarget* GetToplevelEventTarget() OVERRIDE { return this; } 43 44 // ui::EventTarget: 45 virtual bool CanAcceptEvent(const ui::Event& event) OVERRIDE; 46 virtual ui::EventTarget* GetParentTarget() OVERRIDE; 47 virtual scoped_ptr<ui::EventTargetIterator> GetChildIterator() const OVERRIDE; 48 virtual ui::EventTargeter* GetEventTargeter() OVERRIDE; 49 virtual void OnEvent(ui::Event* event) OVERRIDE; 50 51 scoped_ptr<AcceleratorManagerImpl> accelerator_manager_; 52 53 DISALLOW_COPY_AND_ASSIGN(InputManagerImpl); 54}; 55 56InputManagerImpl::InputManagerImpl() 57 : accelerator_manager_( 58 AcceleratorManagerImpl::CreateGlobalAcceleratorManager()) { 59 DCHECK(!instance); 60 instance = this; 61} 62 63InputManagerImpl::~InputManagerImpl() { 64 DCHECK_EQ(instance, this); 65 Shutdown(); 66 instance = NULL; 67} 68 69void InputManagerImpl::Init() { 70 accelerator_manager_->Init(); 71} 72 73void InputManagerImpl::Shutdown() { 74 accelerator_manager_.reset(); 75} 76 77void InputManagerImpl::OnRootWindowCreated(aura::Window* root_window) { 78 aura::client::SetEventClient(root_window, this); 79 accelerator_manager_->OnRootWindowCreated(root_window); 80} 81 82bool InputManagerImpl::CanAcceptEvent(const ui::Event& event) { 83 return true; 84} 85 86ui::EventTarget* InputManagerImpl::GetParentTarget() { 87 return aura::Env::GetInstance(); 88} 89 90scoped_ptr<ui::EventTargetIterator> InputManagerImpl::GetChildIterator() const { 91 return scoped_ptr<ui::EventTargetIterator>(); 92} 93 94ui::EventTargeter* InputManagerImpl::GetEventTargeter() { 95 NOTREACHED(); 96 return NULL; 97} 98 99void InputManagerImpl::OnEvent(ui::Event* event) { 100} 101 102} // namespace 103 104// static 105InputManager* InputManager::Create() { 106 (new InputManagerImpl)->Init(); 107 DCHECK(instance); 108 return instance; 109} 110 111// static 112InputManager* InputManager::Get() { 113 DCHECK(instance); 114 return instance; 115} 116 117// static 118void InputManager::Shutdown() { 119 DCHECK(instance); 120 delete instance; 121 DCHECK(!instance); 122} 123 124} // namespace athena 125