Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / chromeos / events / event_rewriter_controller.cc
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 "chrome/browser/chromeos/events/event_rewriter_controller.h"
6
7 #include "ash/shell.h"
8 #include "ui/aura/window_tree_host.h"
9 #include "ui/events/event_source.h"
10
11 namespace chromeos {
12
13 EventRewriterController::EventRewriterController() : initialized_(false) {
14 }
15
16 EventRewriterController::~EventRewriterController() {
17   // Remove the rewriters from every root window EventSource and destroy them.
18   for (EventRewriters::iterator rewriter_iter = rewriters_.begin();
19        rewriter_iter != rewriters_.end();
20        ++rewriter_iter) {
21     aura::Window::Windows windows = ash::Shell::GetAllRootWindows();
22     for (aura::Window::Windows::iterator window_iter = windows.begin();
23          window_iter != windows.end();
24          ++window_iter) {
25       (*window_iter)->GetHost()->GetEventSource()->RemoveEventRewriter(
26           *rewriter_iter);
27     }
28   }
29   rewriters_.clear();
30 }
31
32 void EventRewriterController::AddEventRewriter(
33     scoped_ptr<ui::EventRewriter> rewriter) {
34   DCHECK(!initialized_);
35   rewriters_.push_back(rewriter.release());
36 }
37
38 void EventRewriterController::Init() {
39   DCHECK(!initialized_);
40   initialized_ = true;
41   // Add the rewriters to each existing root window EventSource.
42   aura::Window::Windows windows = ash::Shell::GetAllRootWindows();
43   for (aura::Window::Windows::iterator it = windows.begin();
44        it != windows.end();
45        ++it) {
46     AddToEventSource((*it)->GetHost()->GetEventSource());
47   }
48 }
49
50 void EventRewriterController::OnHostInitialized(aura::WindowTreeHost* host) {
51   if (initialized_)
52     AddToEventSource(host->GetEventSource());
53 }
54
55 void EventRewriterController::AddToEventSource(ui::EventSource* source) {
56   DCHECK(source);
57   for (EventRewriters::iterator it = rewriters_.begin(); it != rewriters_.end();
58        ++it) {
59     source->AddEventRewriter(*it);
60   }
61 }
62
63 }  // namespace chromeos