- add sources.
[platform/framework/web/crosswalk.git] / src / ash / wm / event_rewriter_event_filter.cc
1 // Copyright (c) 2012 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 "ash/wm/event_rewriter_event_filter.h"
6
7 #include "ash/event_rewriter_delegate.h"
8 #include "base/logging.h"
9 #include "ui/events/event.h"
10
11 #if defined(OS_CHROMEOS)
12 #include "ash/wm/sticky_keys.h"
13 #endif  // OS_CHROMEOS
14 namespace ash {
15 namespace internal {
16
17 EventRewriterEventFilter::EventRewriterEventFilter() {}
18
19 EventRewriterEventFilter::~EventRewriterEventFilter() {}
20
21 void EventRewriterEventFilter::SetEventRewriterDelegate(
22     scoped_ptr<EventRewriterDelegate> delegate) {
23   delegate_ = delegate.Pass();
24 }
25
26 void EventRewriterEventFilter::EnableStickyKeys(bool enabled) {
27 #if defined(OS_CHROMEOS)
28   if (enabled)
29     sticky_keys_.reset(new StickyKeys());
30   else
31     sticky_keys_.reset();
32 #endif  // OS_CHROMEOS
33 }
34
35 void EventRewriterEventFilter::OnKeyEvent(ui::KeyEvent* event) {
36   if (!delegate_)
37     return;
38
39   // Do not consume a translated key event which is generated by an IME.
40   if (event->type() == ui::ET_TRANSLATED_KEY_PRESS ||
41       event->type() == ui::ET_TRANSLATED_KEY_RELEASE) {
42     return;
43   }
44
45   switch (delegate_->RewriteOrFilterKeyEvent(event)) {
46     case EventRewriterDelegate::ACTION_REWRITE_EVENT:
47       break;
48     case EventRewriterDelegate::ACTION_DROP_EVENT:
49       event->StopPropagation();
50       break;
51   }
52
53   if (event->stopped_propagation())
54     return;
55
56 #if defined(OS_CHROMEOS)
57   if (sticky_keys_.get() && sticky_keys_->HandleKeyEvent(event))
58     event->StopPropagation();
59 #endif  // OS_CHROMEOS
60 }
61
62 void EventRewriterEventFilter::OnMouseEvent(ui::MouseEvent* event) {
63   if (!delegate_)
64     return;
65
66   switch (delegate_->RewriteOrFilterLocatedEvent(event)) {
67     case EventRewriterDelegate::ACTION_REWRITE_EVENT:
68       return;
69     case EventRewriterDelegate::ACTION_DROP_EVENT:
70       event->StopPropagation();
71       break;
72   }
73 }
74
75 }  // namespace internal
76 }  // namespace ash