diff options
author | jamiewalch <jamiewalch@chromium.org> | 2015-03-11 20:09:39 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-03-12 03:10:38 +0000 |
commit | 613d162f00dcbf9a5d76b0d25e8522e788f2d619 (patch) | |
tree | 0312d0c2d85277643a071865d7a9f49e801a53dd /remoting/protocol/input_event_tracker.cc | |
parent | 7d9b408634e37977dc8b4dfc12775343eec83162 (diff) | |
download | chromium_src-613d162f00dcbf9a5d76b0d25e8522e788f2d619.zip chromium_src-613d162f00dcbf9a5d76b0d25e8522e788f2d619.tar.gz chromium_src-613d162f00dcbf9a5d76b0d25e8522e788f2d619.tar.bz2 |
Detect and release stuck modifier keys.
We consider a modifier key to be "stuck" if we have sent a keydown event for it and subsequent input event indicates that it is no longer active.
BUG=464534
Review URL: https://codereview.chromium.org/984183002
Cr-Commit-Position: refs/heads/master@{#320220}
Diffstat (limited to 'remoting/protocol/input_event_tracker.cc')
-rw-r--r-- | remoting/protocol/input_event_tracker.cc | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/remoting/protocol/input_event_tracker.cc b/remoting/protocol/input_event_tracker.cc index ff7c1df..aca346b 100644 --- a/remoting/protocol/input_event_tracker.cc +++ b/remoting/protocol/input_event_tracker.cc @@ -67,6 +67,30 @@ void InputEventTracker::ReleaseAll() { DCHECK(touch_point_ids_.empty()); } +void InputEventTracker::ReleaseAllIfModifiersStuck(bool alt_expected, + bool ctrl_expected, + bool meta_expected, + bool shift_expected) { + // See src/ui/events/keycodes/dom4/keycode_converter_data.h for these values. + bool alt_down = + pressed_keys_.find(0x0700e2) != pressed_keys_.end() || // Left + pressed_keys_.find(0x0700e6) != pressed_keys_.end(); // Right + bool ctrl_down = + pressed_keys_.find(0x0700e0) != pressed_keys_.end() || // Left + pressed_keys_.find(0x0700e4) != pressed_keys_.end(); // Right + bool meta_down = + pressed_keys_.find(0x0700e3) != pressed_keys_.end() || // Left + pressed_keys_.find(0x0700e7) != pressed_keys_.end(); // Right + bool shift_down = + pressed_keys_.find(0x0700e1) != pressed_keys_.end() || // Left + pressed_keys_.find(0x0700e5) != pressed_keys_.end(); // Right + + if ((alt_down && !alt_expected) || (ctrl_down && !ctrl_expected) || + (meta_down && !meta_expected) || (shift_down && !shift_expected)) { + ReleaseAll(); + } +} + void InputEventTracker::InjectKeyEvent(const KeyEvent& event) { // We don't need to track the keyboard lock states of key down events. // Pressed keys will be released with |lock_states| set to 0. |