Commit df407c56 authored by spang's avatar spang Committed by Commit bot

ozone: evdev: Release pressed keys when event filtering starts

This prevents filtering out key release events, resulting in stuck keys.

BUG=449162
TEST=Fully rotate glimmer while holding spacebar. No spurious
  key repeats.

Review URL: https://codereview.chromium.org/958403003

Cr-Commit-Position: refs/heads/master@{#318535}
parent 8cc7fae0
......@@ -96,6 +96,9 @@ void InputControllerEvdev::DisableInternalKeyboardExceptKeys(
if (input_device_factory_) {
input_device_factory_->DisableInternalKeyboardExceptKeys(
excepted_keys.Pass());
// Release keys since we may block key up events.
keyboard_->Reset();
}
}
......
......@@ -82,6 +82,11 @@ void KeyboardEvdev::OnKeyChange(unsigned int key,
DispatchKey(key, down, false /* repeat */, timestamp);
}
void KeyboardEvdev::Reset() {
for (int key = 0; key < KEY_CNT; ++key)
OnKeyChange(key, false /* down */, ui::EventTimeForNow());
}
void KeyboardEvdev::SetCapsLockEnabled(bool enabled) {
modifiers_->SetModifierLock(EVDEV_MODIFIER_CAPS_LOCK, enabled);
}
......
......@@ -36,6 +36,9 @@ class EVENTS_OZONE_EVDEV_EXPORT KeyboardEvdev {
// Handlers for raw key presses & releases.
void OnKeyChange(unsigned int code, bool down, base::TimeDelta timestamp);
// Release all pressed keys.
void Reset();
// Handle Caps Lock modifier.
void SetCapsLockEnabled(bool enabled);
bool IsCapsLockEnabled();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment