diff options
author | dgozman@chromium.org <dgozman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-02-18 20:53:42 +0000 |
---|---|---|
committer | dgozman@chromium.org <dgozman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-02-18 20:53:42 +0000 |
commit | 57392c45f92dc958a90976137f111d642a6ccde7 (patch) | |
tree | 302074986973f2cf040bee10387a86256e4d284f /ui | |
parent | c6cd417fd8991f754e1a855b62def543c7573b3a (diff) | |
download | chromium_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.cc | 4 | ||||
-rw-r--r-- | ui/aura/root_window_unittest.cc | 21 |
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) { |