summaryrefslogtreecommitdiffstats
path: root/remoting/protocol/input_event_tracker.cc
diff options
context:
space:
mode:
authorjamiewalch <jamiewalch@chromium.org>2015-03-11 20:09:39 -0700
committerCommit bot <commit-bot@chromium.org>2015-03-12 03:10:38 +0000
commit613d162f00dcbf9a5d76b0d25e8522e788f2d619 (patch)
tree0312d0c2d85277643a071865d7a9f49e801a53dd /remoting/protocol/input_event_tracker.cc
parent7d9b408634e37977dc8b4dfc12775343eec83162 (diff)
downloadchromium_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.cc24
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.