summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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);
};