summaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authordgozman@chromium.org <dgozman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-02-18 20:53:42 +0000
committerdgozman@chromium.org <dgozman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-02-18 20:53:42 +0000
commit57392c45f92dc958a90976137f111d642a6ccde7 (patch)
tree302074986973f2cf040bee10387a86256e4d284f /ui
parentc6cd417fd8991f754e1a855b62def543c7573b3a (diff)
downloadchromium_src-57392c45f92dc958a90976137f111d642a6ccde7.zip
chromium_src-57392c45f92dc958a90976137f111d642a6ccde7.tar.gz
chromium_src-57392c45f92dc958a90976137f111d642a6ccde7.tar.bz2
Aura: update last mouse position while holding pointer.
BUG=343166 Review URL: https://codereview.chromium.org/160563002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@251834 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui')
-rw-r--r--ui/aura/root_window.cc4
-rw-r--r--ui/aura/root_window_unittest.cc21
2 files changed, 23 insertions, 2 deletions
diff --git a/ui/aura/root_window.cc b/ui/aura/root_window.cc
index 04ced91..8733816 100644
--- a/ui/aura/root_window.cc
+++ b/ui/aura/root_window.cc
@@ -791,6 +791,10 @@ void RootWindow::PreDispatchMouseEvent(Window* target,
if (IsEventCandidateForHold(*event) && !dispatching_held_event_) {
if (move_hold_count_) {
+ if (!(event->flags() & ui::EF_IS_SYNTHESIZED) &&
+ event->type() != ui::ET_MOUSE_CAPTURE_CHANGED) {
+ SetLastMouseLocation(window(), event->root_location());
+ }
held_move_event_.reset(new ui::MouseEvent(*event, target, window()));
event->SetHandled();
return;
diff --git a/ui/aura/root_window_unittest.cc b/ui/aura/root_window_unittest.cc
index 168344f..2b28144 100644
--- a/ui/aura/root_window_unittest.cc
+++ b/ui/aura/root_window_unittest.cc
@@ -631,8 +631,8 @@ TEST_F(RootWindowTest, MouseMovesHeld) {
filter->Reset();
// Check that we coalesce held MOUSE_DRAGGED events.
- ui::MouseEvent mouse_dragged_event2(ui::ET_MOUSE_DRAGGED, gfx::Point(1, 1),
- gfx::Point(1, 1), 0, 0);
+ ui::MouseEvent mouse_dragged_event2(ui::ET_MOUSE_DRAGGED, gfx::Point(10, 10),
+ gfx::Point(10, 10), 0, 0);
DispatchEventUsingWindowDispatcher(&mouse_dragged_event);
DispatchEventUsingWindowDispatcher(&mouse_dragged_event2);
EXPECT_TRUE(filter->events().empty());
@@ -672,6 +672,23 @@ TEST_F(RootWindowTest, MouseMovesHeld) {
filter->Reset();
RunAllPendingInMessageLoop();
EXPECT_TRUE(filter->events().empty());
+
+ // Check that synthetic mouse move event has a right location when issued
+ // while holding pointer moves.
+ ui::MouseEvent mouse_dragged_event3(ui::ET_MOUSE_DRAGGED, gfx::Point(28, 28),
+ gfx::Point(28, 28), 0, 0);
+ dispatcher()->HoldPointerMoves();
+ DispatchEventUsingWindowDispatcher(&mouse_dragged_event);
+ DispatchEventUsingWindowDispatcher(&mouse_dragged_event2);
+ window->SetBounds(gfx::Rect(15, 15, 80, 80));
+ DispatchEventUsingWindowDispatcher(&mouse_dragged_event3);
+ RunAllPendingInMessageLoop();
+ EXPECT_TRUE(filter->events().empty());
+ dispatcher()->ReleasePointerMoves();
+ RunAllPendingInMessageLoop();
+ EXPECT_EQ("MOUSE_MOVED", EventTypesToString(filter->events()));
+ EXPECT_EQ(gfx::Point(13, 13), filter->mouse_location(0));
+ filter->Reset();
}
TEST_F(RootWindowTest, TouchMovesHeld) {