Index: ui/events/ozone/evdev/libgestures_glue/gesture_interpreter_libevdev_cros.cc |
diff --git a/ui/events/ozone/evdev/libgestures_glue/gesture_interpreter_libevdev_cros.cc b/ui/events/ozone/evdev/libgestures_glue/gesture_interpreter_libevdev_cros.cc |
index 9bc7c8e355c34bbc1738a59a96e789e55dc2cad5..3e1c0d6d185be1910912571ce75a980cd0a8cde2 100644 |
--- a/ui/events/ozone/evdev/libgestures_glue/gesture_interpreter_libevdev_cros.cc |
+++ b/ui/events/ozone/evdev/libgestures_glue/gesture_interpreter_libevdev_cros.cc |
@@ -437,10 +437,20 @@ void GestureInterpreterLibevdevCros::DispatchChangedKeys(Evdev* evdev, |
key_state_diff[i] = evdev->key_state_bitmask[i] ^ prev_key_state_[i]; |
// Dispatch events for changed keys. |
- for (unsigned long i = 0; i < KEY_CNT; ++i) { |
- if (EvdevBitIsSet(key_state_diff, i)) { |
- bool value = EvdevBitIsSet(evdev->key_state_bitmask, i); |
- keyboard_->OnKeyChange(i, value); |
+ for (unsigned long key = 0; key < KEY_CNT; ++key) { |
+ if (EvdevBitIsSet(key_state_diff, key)) { |
+ bool value = EvdevBitIsSet(evdev->key_state_bitmask, key); |
+ |
+ // Mouse buttons are handled by DispatchMouseButton. |
+ if (key >= BTN_MOUSE && key < BTN_JOYSTICK) |
+ continue; |
+ |
+ // Ignore digi buttons (e.g. BTN_TOOL_FINGER). |
+ if (key >= BTN_DIGI && key < BTN_WHEEL) |
+ continue; |
+ |
+ // Dispatch key press or release to keyboard. |
+ keyboard_->OnKeyChange(key, value); |
} |
} |