diff options
-rw-r--r-- | ash/wm/event_rewriter_event_filter.cc | 18 | ||||
-rw-r--r-- | ash/wm/event_rewriter_event_filter.h | 9 |
2 files changed, 27 insertions, 0 deletions
diff --git a/ash/wm/event_rewriter_event_filter.cc b/ash/wm/event_rewriter_event_filter.cc index 2ef4853..840f498 100644 --- a/ash/wm/event_rewriter_event_filter.cc +++ b/ash/wm/event_rewriter_event_filter.cc @@ -8,6 +8,9 @@ #include "base/logging.h" #include "ui/base/events/event.h" +#if defined(OS_CHROMEOS) +#include "ash/wm/sticky_keys.h" +#endif // OS_CHROMEOS namespace ash { namespace internal { @@ -20,6 +23,13 @@ void EventRewriterEventFilter::SetEventRewriterDelegate( delegate_ = delegate.Pass(); } +void EventRewriterEventFilter::EnableStickyKeys(bool enabled) { +#if defined(OS_CHROMEOS) + if (enabled) + sticky_keys_.reset(new StickyKeys()); +#endif // OS_CHROMEOS +} + void EventRewriterEventFilter::OnKeyEvent(ui::KeyEvent* event) { if (!delegate_) return; @@ -37,6 +47,14 @@ void EventRewriterEventFilter::OnKeyEvent(ui::KeyEvent* event) { event->StopPropagation(); break; } + + if (event->stopped_propagation()) + return; + +#if defined(OS_CHROMEOS) + if (sticky_keys_.get() && sticky_keys_->HandleKeyEvent(event)) + event->StopPropagation(); +#endif // OS_CHROMEOS } void EventRewriterEventFilter::OnMouseEvent(ui::MouseEvent* event) { diff --git a/ash/wm/event_rewriter_event_filter.h b/ash/wm/event_rewriter_event_filter.h index 6c267a0..87cf07f 100644 --- a/ash/wm/event_rewriter_event_filter.h +++ b/ash/wm/event_rewriter_event_filter.h @@ -14,6 +14,9 @@ namespace ash { class EventRewriterDelegate; +#if defined(OS_CHROMEOS) +class StickyKeys; +#endif // OS_CHROMEOS namespace internal { @@ -25,12 +28,18 @@ class ASH_EXPORT EventRewriterEventFilter : public ui::EventHandler { void SetEventRewriterDelegate(scoped_ptr<EventRewriterDelegate> delegate); + // Enables or disables sticky keys. + void EnableStickyKeys(bool enabled); + private: // Overridden from ui::EventHandler: virtual void OnKeyEvent(ui::KeyEvent* event) OVERRIDE; virtual void OnMouseEvent(ui::MouseEvent* event) OVERRIDE; scoped_ptr<EventRewriterDelegate> delegate_; +#if defined(OS_CHROMEOS) + scoped_ptr<StickyKeys> sticky_keys_; +#endif // OS_CHROMEOS DISALLOW_COPY_AND_ASSIGN(EventRewriterEventFilter); }; |