Chromium Code Reviews| 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..f9c0485b9a0a8a61ef1114f6797b88bc089d5a21 100644 |
| --- a/ash/sticky_keys/sticky_keys_controller.cc |
| +++ b/ash/sticky_keys/sticky_keys_controller.cc |
| @@ -25,18 +25,22 @@ 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) { |
| + int changed_down_flags = mod_down_flags & event.flags(); |
| if (consumed) |
| return ui::EVENT_REWRITE_DISCARD; |
| if (released) |
| return ui::EVENT_REWRITE_DISPATCH_ANOTHER; |
| - if (changed_down_flags) |
| + if (changed_down_flags) { |
| + *rewritten_event = ui::Event::Clone(event); |
| + (*rewritten_event)->set_flags(event.flags() | mod_down_flags); |
| return ui::EVENT_REWRITE_REWRITTEN; |
| + } |
| return ui::EVENT_REWRITE_CONTINUE; |
| } |
| @@ -82,22 +86,73 @@ void StickyKeysController::SetModifiersEnabled(bool mod3_enabled, |
| } |
| } |
| +StickyKeysOverlay* StickyKeysController::GetOverlayForTest() { |
| + return overlay_.get(); |
| +} |
| + |
| +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; |
| + |
| + if (event.IsKeyEvent()) { |
| + int mod_down_flags = 0; |
| + bool released = false; |
| + bool consumed = |
| + HandleKeyEvent(*event.AsKeyEvent(), &mod_down_flags, &released); |
| + UpdateOverlay(); |
| + return RewriteUpdate(consumed, released, mod_down_flags, event, |
| + rewritten_event); |
| + } else if (event.IsMouseEvent()) { |
| + int mod_down_flags = 0; |
| + bool released = false; |
| + bool consumed = |
| + HandleMouseEvent(*event.AsMouseEvent(), &mod_down_flags, &released); |
| + UpdateOverlay(); |
| + return RewriteUpdate(consumed, released, mod_down_flags, event, |
| + rewritten_event); |
| + } else if (event.IsScrollEvent()) { |
| + int mod_down_flags = 0; |
| + bool released = false; |
| + bool consumed = |
| + HandleScrollEvent(*event.AsScrollEvent(), &mod_down_flags, &released); |
| + UpdateOverlay(); |
| + return RewriteUpdate(consumed, released, mod_down_flags, event, |
| + 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(); |
| + int remaining = shift_sticky_key_->GetModifierUpEvent(new_event) + |
| + alt_sticky_key_->GetModifierUpEvent(new_event) + |
| + altgr_sticky_key_->GetModifierUpEvent(new_event) + |
| + ctrl_sticky_key_->GetModifierUpEvent(new_event) + |
| + mod3_sticky_key_->GetModifierUpEvent(new_event) + |
| + search_sticky_key_->GetModifierUpEvent(new_event); |
| + if (!new_event) |
| + return ui::EVENT_REWRITE_CONTINUE; |
| + if (remaining) |
| + return ui::EVENT_REWRITE_DISPATCH_ANOTHER; |
| + return ui::EVENT_REWRITE_REWRITTEN; |
| +} |
| + |
| 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); |
| + return 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); |
| } |
| bool StickyKeysController::HandleMouseEvent(const ui::MouseEvent& event, |
| @@ -122,60 +177,6 @@ bool StickyKeysController::HandleScrollEvent(const ui::ScrollEvent& event, |
| mod3_sticky_key_->HandleScrollEvent(event, mod_down_flags, released); |
| } |
| -ui::EventRewriteStatus StickyKeysController::RewriteKeyEvent( |
|
Tim Song
2017/03/07 18:48:54
Could you keep these functions (but make them priv
Peng
2017/03/07 19:43:16
Done
|
| - const ui::KeyEvent& event, |
| - ui::KeyboardCode key_code, |
| - int* flags) { |
| - 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); |
| -} |
| - |
| -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); |
| -} |
| - |
| -ui::EventRewriteStatus StickyKeysController::NextDispatchEvent( |
| - std::unique_ptr<ui::Event>* new_event) { |
| - DCHECK(new_event); |
| - new_event->reset(); |
| - int remaining = shift_sticky_key_->GetModifierUpEvent(new_event) + |
| - alt_sticky_key_->GetModifierUpEvent(new_event) + |
| - altgr_sticky_key_->GetModifierUpEvent(new_event) + |
| - ctrl_sticky_key_->GetModifierUpEvent(new_event) + |
| - mod3_sticky_key_->GetModifierUpEvent(new_event) + |
| - search_sticky_key_->GetModifierUpEvent(new_event); |
| - if (!new_event) |
| - return ui::EVENT_REWRITE_CONTINUE; |
| - if (remaining) |
| - return ui::EVENT_REWRITE_DISPATCH_ANOTHER; |
| - return ui::EVENT_REWRITE_REWRITTEN; |
| -} |
| - |
| void StickyKeysController::UpdateOverlay() { |
| overlay_->SetModifierKeyState(ui::EF_SHIFT_DOWN, |
| shift_sticky_key_->current_state()); |
| @@ -201,10 +202,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 +213,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 +330,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 +357,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 +382,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: |