event_rewriter_event_filter.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
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
11namespace ash {
12namespace internal {
13
14EventRewriterEventFilter::EventRewriterEventFilter() {}
15
16EventRewriterEventFilter::~EventRewriterEventFilter() {}
17
18void EventRewriterEventFilter::SetEventRewriterDelegate(
19    scoped_ptr<EventRewriterDelegate> delegate) {
20  delegate_.swap(delegate);
21}
22
23bool EventRewriterEventFilter::PreHandleKeyEvent(
24    aura::Window* target, ui::KeyEvent* event) {
25  if (!delegate_.get())
26    return false;
27
28  // Do not consume a translated key event which is generated by an IME.
29  if (event->type() == ui::ET_TRANSLATED_KEY_PRESS ||
30      event->type() == ui::ET_TRANSLATED_KEY_RELEASE) {
31    return false;
32  }
33
34  switch (delegate_->RewriteOrFilterKeyEvent(event)) {
35    case EventRewriterDelegate::ACTION_REWRITE_EVENT:
36      return false;
37    case EventRewriterDelegate::ACTION_DROP_EVENT:
38      return true;
39  }
40
41  NOTREACHED();
42  return false;
43}
44
45bool EventRewriterEventFilter::PreHandleMouseEvent(
46    aura::Window* target, ui::MouseEvent* event) {
47  if (!delegate_.get())
48    return false;
49
50  switch (delegate_->RewriteOrFilterLocatedEvent(event)) {
51    case EventRewriterDelegate::ACTION_REWRITE_EVENT:
52      return false;
53    case EventRewriterDelegate::ACTION_DROP_EVENT:
54      return true;
55  }
56
57  NOTREACHED();
58  return false;
59}
60
61ui::EventResult EventRewriterEventFilter::PreHandleTouchEvent(
62    aura::Window* target, ui::TouchEvent* event) {
63  return ui::ER_UNHANDLED;  // Not handled.
64}
65
66ui::EventResult EventRewriterEventFilter::PreHandleGestureEvent(
67    aura::Window* target, ui::GestureEvent* event) {
68  return ui::ER_UNHANDLED;  // Not handled.
69}
70
71}  // namespace internal
72}  // namespace ash
73