Index: ash/wm/key_rewriter_event_filter.cc |
diff --git a/ash/wm/key_rewriter_event_filter.cc b/ash/wm/key_rewriter_event_filter.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..30ba84da34db0b3bda5e4d74da55a37547909a5d |
--- /dev/null |
+++ b/ash/wm/key_rewriter_event_filter.cc |
@@ -0,0 +1,61 @@ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "ash/wm/key_rewriter_event_filter.h" |
+ |
+#include "base/logging.h" |
+#include "ash/key_rewriter_delegate.h" |
+#include "ui/aura/event.h" |
+ |
+namespace ash { |
+namespace internal { |
+ |
+KeyRewriterEventFilter::KeyRewriterEventFilter() {} |
+ |
+KeyRewriterEventFilter::~KeyRewriterEventFilter() {} |
+ |
+void KeyRewriterEventFilter::SetKeyRewriterDelegate( |
+ scoped_ptr<KeyRewriterDelegate> delegate) { |
+ delegate_.swap(delegate); |
+} |
+ |
+bool KeyRewriterEventFilter::PreHandleKeyEvent( |
+ aura::Window* target, aura::KeyEvent* event) { |
+ if (!delegate_.get()) |
+ return false; |
+ |
+ // Do not consume a translated key event which is generated by an IME. |
+ if (event->type() == ui::ET_TRANSLATED_KEY_PRESS || |
+ event->type() == ui::ET_TRANSLATED_KEY_RELEASE) { |
+ return false; |
+ } |
+ |
+ switch (delegate_->RewriteOrFilterKeyEvent(event)) { |
+ case KeyRewriterDelegate::ACTION_REWRITE_EVENT: |
+ return false; |
+ case KeyRewriterDelegate::ACTION_DROP_EVENT: |
+ return true; |
+ } |
+ |
+ NOTREACHED(); |
+ return false; |
+} |
+ |
+bool KeyRewriterEventFilter::PreHandleMouseEvent( |
+ aura::Window* target, aura::MouseEvent* event) { |
+ return false; // Not handled. |
+} |
+ |
+ui::TouchStatus KeyRewriterEventFilter::PreHandleTouchEvent( |
+ aura::Window* target, aura::TouchEvent* event) { |
+ return ui::TOUCH_STATUS_UNKNOWN; // Not handled. |
+} |
+ |
+ui::GestureStatus KeyRewriterEventFilter::PreHandleGestureEvent( |
+ aura::Window* target, aura::GestureEvent* event) { |
+ return ui::GESTURE_STATUS_UNKNOWN; // Not handled. |
+} |
+ |
+} // namespace internal |
+} // namespace ash |