Commit e9047088 authored by afakhry's avatar afakhry Committed by Commit bot

A mouse event created from the same native event will be marked as repeated.

If a mouse event has been created from the same native event with the
same time stamp, it shouldn't be marked as repeated.

R=sadrul@chromium.org
BUG=474282
TEST=events_unittests --gtest_filter=EventTest.*

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

Cr-Commit-Position: refs/heads/master@{#324271}
parent 29b6de07
......@@ -357,6 +357,10 @@ bool MouseEvent::IsRepeatedClickEvent(
(event2.flags() & ~EF_IS_DOUBLE_CLICK))
return false;
// The new event has been created from the same native event.
if (event1.time_stamp() == event2.time_stamp())
return false;
base::TimeDelta time_difference = event2.time_stamp() - event1.time_stamp();
if (time_difference.InMilliseconds() > kDoubleClickTimeMS)
......
......@@ -79,6 +79,15 @@ TEST(EventTest, RepeatedClick) {
base::TimeDelta soon = start + base::TimeDelta::FromMilliseconds(1);
base::TimeDelta later = start + base::TimeDelta::FromMilliseconds(1000);
// Same event.
test_ev1.set_location(gfx::Point(0, 0));
test_ev2.set_location(gfx::Point(1, 0));
test_ev1.set_time_stamp(start);
test_ev2.set_time_stamp(start);
EXPECT_FALSE(MouseEvent::IsRepeatedClickEvent(mouse_ev1, mouse_ev2));
MouseEvent mouse_ev3(mouse_ev1);
EXPECT_FALSE(MouseEvent::IsRepeatedClickEvent(mouse_ev1, mouse_ev3));
// Close point.
test_ev1.set_location(gfx::Point(0, 0));
test_ev2.set_location(gfx::Point(1, 0));
......@@ -110,6 +119,7 @@ TEST(EventTest, DoubleClickRequiresRelease) {
const gfx::Point origin2(100, 0);
scoped_ptr<MouseEvent> ev;
base::TimeDelta start = base::TimeDelta::FromMilliseconds(0);
base::TimeDelta soon = start + base::TimeDelta::FromMilliseconds(1);
ev.reset(new MouseEvent(ET_MOUSE_PRESSED, origin1, origin1, EventTimeForNow(),
0, 0));
......@@ -130,11 +140,11 @@ TEST(EventTest, DoubleClickRequiresRelease) {
EXPECT_EQ(1, MouseEvent::GetRepeatCount(*ev));
ev.reset(new MouseEvent(ET_MOUSE_PRESSED, origin2, origin2, EventTimeForNow(),
0, 0));
ev->set_time_stamp(start);
ev->set_time_stamp(soon);
EXPECT_EQ(2, MouseEvent::GetRepeatCount(*ev));
ev.reset(new MouseEvent(ET_MOUSE_RELEASED, origin2, origin2,
EventTimeForNow(), 0, 0));
ev->set_time_stamp(start);
ev->set_time_stamp(soon);
EXPECT_EQ(2, MouseEvent::GetRepeatCount(*ev));
MouseEvent::ResetLastClickForTest();
}
......@@ -145,6 +155,7 @@ TEST(EventTest, SingleClickRightLeft) {
const gfx::Point origin(0, 0);
scoped_ptr<MouseEvent> ev;
base::TimeDelta start = base::TimeDelta::FromMilliseconds(0);
base::TimeDelta soon = start + base::TimeDelta::FromMilliseconds(1);
ev.reset(new MouseEvent(ET_MOUSE_PRESSED, origin, origin, EventTimeForNow(),
ui::EF_RIGHT_MOUSE_BUTTON,
......@@ -161,7 +172,7 @@ TEST(EventTest, SingleClickRightLeft) {
EXPECT_EQ(1, MouseEvent::GetRepeatCount(*ev));
ev.reset(new MouseEvent(ET_MOUSE_PRESSED, origin, origin, EventTimeForNow(),
ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON));
ev->set_time_stamp(start);
ev->set_time_stamp(soon);
EXPECT_EQ(2, MouseEvent::GetRepeatCount(*ev));
MouseEvent::ResetLastClickForTest();
}
......
......@@ -208,9 +208,11 @@ TEST_F(EventsXTest, ClickCount) {
XEvent event;
gfx::Point location(5, 10);
base::TimeDelta time_stamp = base::TimeDelta::FromMilliseconds(1);
for (int i = 1; i <= 3; ++i) {
InitButtonEvent(&event, true, location, 1, 0);
{
event.xbutton.time = time_stamp.InMilliseconds();
MouseEvent mouseev(&event);
EXPECT_EQ(ui::ET_MOUSE_PRESSED, mouseev.type());
EXPECT_EQ(i, mouseev.GetClickCount());
......@@ -218,10 +220,12 @@ TEST_F(EventsXTest, ClickCount) {
InitButtonEvent(&event, false, location, 1, 0);
{
event.xbutton.time = time_stamp.InMilliseconds();
MouseEvent mouseev(&event);
EXPECT_EQ(ui::ET_MOUSE_RELEASED, mouseev.type());
EXPECT_EQ(i, mouseev.GetClickCount());
}
time_stamp += base::TimeDelta::FromMilliseconds(1);
}
}
......
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