summaryrefslogtreecommitdiffstats
path: root/ash
diff options
context:
space:
mode:
authornona@chromium.org <nona@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-19 13:10:21 +0000
committernona@chromium.org <nona@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-19 13:10:21 +0000
commitf24e72f548a2623467810d11dbfecbe53bbb5051 (patch)
tree479ad7a240f547c6e3b82a42b145927fb731be48 /ash
parent022731a384c7666aff36f8d87ec627d7bedf8995 (diff)
downloadchromium_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.cc18
-rw-r--r--ash/wm/event_rewriter_event_filter.h9
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);
};