diff options
author | nona@chromium.org <nona@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-19 13:10:21 +0000 |
---|---|---|
committer | nona@chromium.org <nona@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-19 13:10:21 +0000 |
commit | f24e72f548a2623467810d11dbfecbe53bbb5051 (patch) | |
tree | 479ad7a240f547c6e3b82a42b145927fb731be48 /ash | |
parent | 022731a384c7666aff36f8d87ec627d7bedf8995 (diff) | |
download | chromium_src-f24e72f548a2623467810d11dbfecbe53bbb5051.zip chromium_src-f24e72f548a2623467810d11dbfecbe53bbb5051.tar.gz chromium_src-f24e72f548a2623467810d11dbfecbe53bbb5051.tar.bz2 |
Dispatch Sticky Keys after event rewriter handled.
Sticky Keys should be handled before input methods and after event rewriter.
BUG=229042
TEST=None
Review URL: https://chromiumcodereview.appspot.com/16809002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@207220 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ash')
-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); }; |