Index: ash/sticky_keys/sticky_keys_controller.cc |
diff --git a/ash/sticky_keys/sticky_keys_controller.cc b/ash/sticky_keys/sticky_keys_controller.cc |
index abbcaf443bd72cc5aa6cb43547077f1e0f2acce7..d3257a8adbe291f4094708eaea93a86d27b6e030 100644 |
--- a/ash/sticky_keys/sticky_keys_controller.cc |
+++ b/ash/sticky_keys/sticky_keys_controller.cc |
@@ -25,18 +25,20 @@ bool ShouldModifyMouseEvent(const ui::MouseEvent& event) { |
} |
// Handle the common tail of event rewriting. |
-ui::EventRewriteStatus RewriteUpdate(bool consumed, |
- bool released, |
- int mod_down_flags, |
- int* flags) { |
- int changed_down_flags = mod_down_flags & ~*flags; |
- *flags |= mod_down_flags; |
+ui::EventRewriteStatus RewriteUpdate( |
+ bool consumed, |
+ bool released, |
+ int mod_down_flags, |
+ const ui::Event& event, |
+ std::unique_ptr<ui::Event>* rewritten_event) { |
if (consumed) |
return ui::EVENT_REWRITE_DISCARD; |
- if (released) |
- return ui::EVENT_REWRITE_DISPATCH_ANOTHER; |
- if (changed_down_flags) |
- return ui::EVENT_REWRITE_REWRITTEN; |
+ if (mod_down_flags & ~event.flags()) { |
+ *rewritten_event = ui::Event::Clone(event); |
+ (*rewritten_event)->set_flags(event.flags() | mod_down_flags); |
+ return released ? ui::EVENT_REWRITE_DISPATCH_ANOTHER |
+ : ui::EVENT_REWRITE_REWRITTEN; |
+ } |
return ui::EVENT_REWRITE_CONTINUE; |
} |
@@ -82,84 +84,32 @@ void StickyKeysController::SetModifiersEnabled(bool mod3_enabled, |
} |
} |
-bool StickyKeysController::HandleKeyEvent(const ui::KeyEvent& event, |
- ui::KeyboardCode key_code, |
- int* mod_down_flags, |
- bool* released) { |
- return shift_sticky_key_->HandleKeyEvent(event, key_code, mod_down_flags, |
- released) || |
- alt_sticky_key_->HandleKeyEvent(event, key_code, mod_down_flags, |
- released) || |
- altgr_sticky_key_->HandleKeyEvent(event, key_code, mod_down_flags, |
- released) || |
- ctrl_sticky_key_->HandleKeyEvent(event, key_code, mod_down_flags, |
- released) || |
- mod3_sticky_key_->HandleKeyEvent(event, key_code, mod_down_flags, |
- released) || |
- search_sticky_key_->HandleKeyEvent(event, key_code, mod_down_flags, |
- released); |
-} |
- |
-bool StickyKeysController::HandleMouseEvent(const ui::MouseEvent& event, |
- int* mod_down_flags, |
- bool* released) { |
- return shift_sticky_key_->HandleMouseEvent(event, mod_down_flags, released) || |
- alt_sticky_key_->HandleMouseEvent(event, mod_down_flags, released) || |
- altgr_sticky_key_->HandleMouseEvent(event, mod_down_flags, released) || |
- ctrl_sticky_key_->HandleMouseEvent(event, mod_down_flags, released) || |
- mod3_sticky_key_->HandleMouseEvent(event, mod_down_flags, released); |
-} |
- |
-bool StickyKeysController::HandleScrollEvent(const ui::ScrollEvent& event, |
- int* mod_down_flags, |
- bool* released) { |
- return shift_sticky_key_->HandleScrollEvent(event, mod_down_flags, |
- released) || |
- alt_sticky_key_->HandleScrollEvent(event, mod_down_flags, released) || |
- altgr_sticky_key_->HandleScrollEvent(event, mod_down_flags, |
- released) || |
- ctrl_sticky_key_->HandleScrollEvent(event, mod_down_flags, released) || |
- mod3_sticky_key_->HandleScrollEvent(event, mod_down_flags, released); |
+StickyKeysOverlay* StickyKeysController::GetOverlayForTest() { |
+ return overlay_.get(); |
} |
-ui::EventRewriteStatus StickyKeysController::RewriteKeyEvent( |
- const ui::KeyEvent& event, |
- ui::KeyboardCode key_code, |
- int* flags) { |
+ui::EventRewriteStatus StickyKeysController::RewriteEvent( |
+ const ui::Event& event, |
+ std::unique_ptr<ui::Event>* rewritten_event) { |
+ DCHECK(rewritten_event); |
if (!enabled_) |
return ui::EVENT_REWRITE_CONTINUE; |
- int mod_down_flags = 0; |
- bool released = false; |
- bool consumed = HandleKeyEvent(event, key_code, &mod_down_flags, &released); |
- UpdateOverlay(); |
- return RewriteUpdate(consumed, released, mod_down_flags, flags); |
-} |
-ui::EventRewriteStatus StickyKeysController::RewriteMouseEvent( |
- const ui::MouseEvent& event, |
- int* flags) { |
- if (!enabled_) |
- return ui::EVENT_REWRITE_CONTINUE; |
- int mod_down_flags = 0; |
- bool released = false; |
- bool consumed = HandleMouseEvent(event, &mod_down_flags, &released); |
- UpdateOverlay(); |
- return RewriteUpdate(consumed, released, mod_down_flags, flags); |
-} |
+ if (event.IsKeyEvent()) |
+ return RewriteKeyEvent(*event.AsKeyEvent(), rewritten_event); |
-ui::EventRewriteStatus StickyKeysController::RewriteScrollEvent( |
- const ui::ScrollEvent& event, |
- int* flags) { |
- if (!enabled_) |
- return ui::EVENT_REWRITE_CONTINUE; |
- int mod_down_flags = 0; |
- bool released = false; |
- bool consumed = HandleScrollEvent(event, &mod_down_flags, &released); |
- UpdateOverlay(); |
- return RewriteUpdate(consumed, released, mod_down_flags, flags); |
+ if (event.IsMouseEvent()) |
+ return RewriteMouseEvent(*event.AsMouseEvent(), rewritten_event); |
+ |
+ if (event.IsScrollEvent()) |
+ return RewriteScrollEvent(*event.AsScrollEvent(), rewritten_event); |
+ |
+ NOTREACHED(); |
+ return ui::EVENT_REWRITE_CONTINUE; |
} |
ui::EventRewriteStatus StickyKeysController::NextDispatchEvent( |
+ const ui::Event& last_event, |
std::unique_ptr<ui::Event>* new_event) { |
DCHECK(new_event); |
new_event->reset(); |
@@ -176,6 +126,56 @@ ui::EventRewriteStatus StickyKeysController::NextDispatchEvent( |
return ui::EVENT_REWRITE_REWRITTEN; |
} |
+ui::EventRewriteStatus StickyKeysController::RewriteKeyEvent( |
+ const ui::KeyEvent& event, |
+ std::unique_ptr<ui::Event>* rewritten_event) { |
+ DCHECK(enabled_); |
+ int mod_down_flags = 0; |
+ bool released = false; |
+ bool consumed = |
+ shift_sticky_key_->HandleKeyEvent(event, &mod_down_flags, &released) || |
+ alt_sticky_key_->HandleKeyEvent(event, &mod_down_flags, &released) || |
+ altgr_sticky_key_->HandleKeyEvent(event, &mod_down_flags, &released) || |
+ ctrl_sticky_key_->HandleKeyEvent(event, &mod_down_flags, &released) || |
+ mod3_sticky_key_->HandleKeyEvent(event, &mod_down_flags, &released) || |
+ search_sticky_key_->HandleKeyEvent(event, &mod_down_flags, &released); |
+ UpdateOverlay(); |
+ return RewriteUpdate(consumed, released, mod_down_flags, event, |
+ rewritten_event); |
+} |
+ |
+ui::EventRewriteStatus StickyKeysController::RewriteMouseEvent( |
+ const ui::MouseEvent& event, |
+ std::unique_ptr<ui::Event>* rewritten_event) { |
+ DCHECK(enabled_); |
+ int mod_down_flags = 0; |
+ bool released = false; |
+ bool consumed = |
+ shift_sticky_key_->HandleMouseEvent(event, &mod_down_flags, &released) || |
+ alt_sticky_key_->HandleMouseEvent(event, &mod_down_flags, &released) || |
+ altgr_sticky_key_->HandleMouseEvent(event, &mod_down_flags, &released) || |
+ ctrl_sticky_key_->HandleMouseEvent(event, &mod_down_flags, &released) || |
+ mod3_sticky_key_->HandleMouseEvent(event, &mod_down_flags, &released); |
+ return RewriteUpdate(consumed, released, mod_down_flags, event, |
+ rewritten_event); |
+} |
+ |
+ui::EventRewriteStatus StickyKeysController::RewriteScrollEvent( |
+ const ui::ScrollEvent& event, |
+ std::unique_ptr<ui::Event>* rewritten_event) { |
+ DCHECK(enabled_); |
+ int mod_down_flags = 0; |
+ bool released = false; |
+ bool consumed = |
+ shift_sticky_key_->HandleScrollEvent(event, &mod_down_flags, &released) || |
+ alt_sticky_key_->HandleScrollEvent(event, &mod_down_flags, &released) || |
+ altgr_sticky_key_->HandleScrollEvent(event, &mod_down_flags, &released) || |
+ ctrl_sticky_key_->HandleScrollEvent(event, &mod_down_flags, &released) || |
+ mod3_sticky_key_->HandleScrollEvent(event, &mod_down_flags, &released); |
+ return RewriteUpdate(consumed, released, mod_down_flags, event, |
+ rewritten_event); |
+} |
+ |
void StickyKeysController::UpdateOverlay() { |
overlay_->SetModifierKeyState(ui::EF_SHIFT_DOWN, |
shift_sticky_key_->current_state()); |
@@ -201,10 +201,6 @@ void StickyKeysController::UpdateOverlay() { |
overlay_->Show(enabled_ && key_in_use); |
} |
-StickyKeysOverlay* StickyKeysController::GetOverlayForTest() { |
- return overlay_.get(); |
-} |
- |
/////////////////////////////////////////////////////////////////////////////// |
// StickyKeysHandler |
StickyKeysHandler::StickyKeysHandler(ui::EventFlags modifier_flag) |
@@ -216,16 +212,15 @@ StickyKeysHandler::StickyKeysHandler(ui::EventFlags modifier_flag) |
StickyKeysHandler::~StickyKeysHandler() {} |
bool StickyKeysHandler::HandleKeyEvent(const ui::KeyEvent& event, |
- ui::KeyboardCode key_code, |
int* mod_down_flags, |
bool* released) { |
switch (current_state_) { |
case STICKY_KEY_STATE_DISABLED: |
- return HandleDisabledState(event, key_code); |
+ return HandleDisabledState(event); |
case STICKY_KEY_STATE_ENABLED: |
- return HandleEnabledState(event, key_code, mod_down_flags, released); |
+ return HandleEnabledState(event, mod_down_flags, released); |
case STICKY_KEY_STATE_LOCKED: |
- return HandleLockedState(event, key_code, mod_down_flags, released); |
+ return HandleLockedState(event, mod_down_flags, released); |
} |
NOTREACHED(); |
return false; |
@@ -334,9 +329,8 @@ StickyKeysHandler::KeyEventType StickyKeysHandler::TranslateKeyEvent( |
return type == ui::ET_KEY_PRESSED ? OTHER_MODIFIER_DOWN : OTHER_MODIFIER_UP; |
} |
-bool StickyKeysHandler::HandleDisabledState(const ui::KeyEvent& event, |
- ui::KeyboardCode key_code) { |
- switch (TranslateKeyEvent(event.type(), key_code)) { |
+bool StickyKeysHandler::HandleDisabledState(const ui::KeyEvent& event) { |
+ switch (TranslateKeyEvent(event.type(), event.key_code())) { |
case TARGET_MODIFIER_UP: |
if (preparing_to_enable_) { |
preparing_to_enable_ = false; |
@@ -362,10 +356,9 @@ bool StickyKeysHandler::HandleDisabledState(const ui::KeyEvent& event, |
} |
bool StickyKeysHandler::HandleEnabledState(const ui::KeyEvent& event, |
- ui::KeyboardCode key_code, |
int* mod_down_flags, |
bool* released) { |
- switch (TranslateKeyEvent(event.type(), key_code)) { |
+ switch (TranslateKeyEvent(event.type(), event.key_code())) { |
case NORMAL_KEY_UP: |
case TARGET_MODIFIER_DOWN: |
return false; |
@@ -388,10 +381,9 @@ bool StickyKeysHandler::HandleEnabledState(const ui::KeyEvent& event, |
} |
bool StickyKeysHandler::HandleLockedState(const ui::KeyEvent& event, |
- ui::KeyboardCode key_code, |
int* mod_down_flags, |
bool* released) { |
- switch (TranslateKeyEvent(event.type(), key_code)) { |
+ switch (TranslateKeyEvent(event.type(), event.key_code())) { |
case TARGET_MODIFIER_DOWN: |
return true; |
case TARGET_MODIFIER_UP: |