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