Skip to content

Commit

Permalink
Dispatch Sticky Keys after event rewriter handled.
Browse files Browse the repository at this point in the history
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
  • Loading branch information
nona@chromium.org committed Jun 19, 2013
1 parent 022731a commit f24e72f
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 0 deletions.
18 changes: 18 additions & 0 deletions ash/wm/event_rewriter_event_filter.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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 {

Expand All @@ -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;
Expand All @@ -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) {
Expand Down
9 changes: 9 additions & 0 deletions ash/wm/event_rewriter_event_filter.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@
namespace ash {

class EventRewriterDelegate;
#if defined(OS_CHROMEOS)
class StickyKeys;
#endif // OS_CHROMEOS

namespace internal {

Expand All @@ -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);
};
Expand Down

0 comments on commit f24e72f

Please sign in to comment.