Commit ff928aa9 authored by Chanyong Moon's avatar Chanyong Moon Committed by Commit Bot

Fix KeyEvent repeat check expression

When keydown event is triggered continuously,
mousedown event cause keydown event as not repeating event.

This change append check logic to exclude mouse button flags.

Bug: 1114281
Change-Id: Ie967e34cbc13c2489ccba4945cb4ae0dcbce0deb
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2368577Reviewed-by: default avatarSadrul Chowdhury <sadrul@chromium.org>
Reviewed-by: default avatarMustaq Ahmed <mustaq@chromium.org>
Commit-Queue: Mustaq Ahmed <mustaq@chromium.org>
Cr-Commit-Position: refs/heads/master@{#804943}
parent c47acc03
...@@ -994,7 +994,8 @@ bool KeyEvent::IsRepeated(KeyEvent** last_key_event) { ...@@ -994,7 +994,8 @@ bool KeyEvent::IsRepeated(KeyEvent** last_key_event) {
#endif #endif
if (!is_repeat) { if (!is_repeat) {
if (key_code() == last->key_code() && if (key_code() == last->key_code() &&
flags() == (last->flags() & ~EF_IS_REPEAT) && (flags() & ~EF_MOUSE_BUTTON) ==
(last->flags() & ~EF_IS_REPEAT & ~EF_MOUSE_BUTTON) &&
(time_stamp() - last->time_stamp()).InMilliseconds() < (time_stamp() - last->time_stamp()).InMilliseconds() <
kMaxAutoRepeatTimeMs) { kMaxAutoRepeatTimeMs) {
is_repeat = true; is_repeat = true;
......
...@@ -40,6 +40,9 @@ enum EventFlags { ...@@ -40,6 +40,9 @@ enum EventFlags {
EF_RIGHT_MOUSE_BUTTON = 1 << 12, EF_RIGHT_MOUSE_BUTTON = 1 << 12,
EF_BACK_MOUSE_BUTTON = 1 << 13, EF_BACK_MOUSE_BUTTON = 1 << 13,
EF_FORWARD_MOUSE_BUTTON = 1 << 14, EF_FORWARD_MOUSE_BUTTON = 1 << 14,
EF_MOUSE_BUTTON = EF_LEFT_MOUSE_BUTTON | EF_MIDDLE_MOUSE_BUTTON |
EF_RIGHT_MOUSE_BUTTON | EF_BACK_MOUSE_BUTTON |
EF_FORWARD_MOUSE_BUTTON,
// An artificial value used to bridge platform differences. // An artificial value used to bridge platform differences.
// Many commands on Mac as Cmd+Key are the counterparts of // Many commands on Mac as Cmd+Key are the counterparts of
......
...@@ -140,6 +140,29 @@ TEST(EventTest, RepeatedClick) { ...@@ -140,6 +140,29 @@ TEST(EventTest, RepeatedClick) {
EXPECT_FALSE(MouseEvent::IsRepeatedClickEvent(event1, event2)); EXPECT_FALSE(MouseEvent::IsRepeatedClickEvent(event1, event2));
} }
TEST(EventTest, RepeatedKeyEvent) {
base::TimeTicks start = base::TimeTicks::Now();
base::TimeTicks time1 = start + base::TimeDelta::FromMilliseconds(1);
base::TimeTicks time2 = start + base::TimeDelta::FromMilliseconds(2);
base::TimeTicks time3 = start + base::TimeDelta::FromMilliseconds(3);
KeyEvent event1(ET_KEY_PRESSED, VKEY_A, 0, start);
KeyEvent event2(ET_KEY_PRESSED, VKEY_A, 0, time1);
KeyEvent event3(ET_KEY_PRESSED, VKEY_A, EF_LEFT_MOUSE_BUTTON, time2);
KeyEvent event4(ET_KEY_PRESSED, VKEY_A, 0, time3);
event1.InitializeNative();
EXPECT_TRUE((event1.flags() & EF_IS_REPEAT) == 0);
event2.InitializeNative();
EXPECT_TRUE((event2.flags() & EF_IS_REPEAT) != 0);
event3.InitializeNative();
EXPECT_TRUE((event3.flags() & EF_IS_REPEAT) != 0);
event4.InitializeNative();
EXPECT_TRUE((event4.flags() & EF_IS_REPEAT) != 0);
}
// Tests that re-processing the same mouse press event (detected by timestamp) // Tests that re-processing the same mouse press event (detected by timestamp)
// does not yield a double click event: http://crbug.com/389162 // does not yield a double click event: http://crbug.com/389162
TEST(EventTest, DoubleClickRequiresUniqueTimestamp) { TEST(EventTest, DoubleClickRequiresUniqueTimestamp) {
......
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