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