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