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: |