diff options
author | oshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-03 00:23:40 +0000 |
---|---|---|
committer | oshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-03 00:23:40 +0000 |
commit | 7ec601db8b4224011d2e7a66a730d809f4c32ae8 (patch) | |
tree | 4f67bf8caf686ea61d9ccf984153607d2d51aef0 /ui/base/x | |
parent | 543889ca84a0cf564c113ed5d2b49d8e948e7b71 (diff) | |
download | chromium_src-7ec601db8b4224011d2e7a66a730d809f4c32ae8.zip chromium_src-7ec601db8b4224011d2e7a66a730d809f4c32ae8.tar.gz chromium_src-7ec601db8b4224011d2e7a66a730d809f4c32ae8.tar.bz2 |
Use correct location for Enter/LeaveNotify
This was giving wrong location (0,0) for ET_MOUSE_ENTERED/EXITED event.
BUG=152501
TEST=manual: see bug for repro step.
Review URL: https://chromiumcodereview.appspot.com/11024010
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@159810 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui/base/x')
-rw-r--r-- | ui/base/x/events_x.cc | 12 | ||||
-rw-r--r-- | ui/base/x/events_x_unittest.cc | 22 |
2 files changed, 33 insertions, 1 deletions
diff --git a/ui/base/x/events_x.cc b/ui/base/x/events_x.cc index a8b44f5..8245964 100644 --- a/ui/base/x/events_x.cc +++ b/ui/base/x/events_x.cc @@ -818,6 +818,9 @@ base::TimeDelta EventTimeFromNative(const base::NativeEvent& native_event) { gfx::Point EventLocationFromNative(const base::NativeEvent& native_event) { switch (native_event->type) { + case EnterNotify: + case LeaveNotify: + return gfx::Point(native_event->xcrossing.x, native_event->xcrossing.y); case ButtonPress: case ButtonRelease: return gfx::Point(native_event->xbutton.x, native_event->xbutton.y); @@ -863,6 +866,11 @@ gfx::Point EventLocationFromNative(const base::NativeEvent& native_event) { gfx::Point EventSystemLocationFromNative( const base::NativeEvent& native_event) { switch (native_event->type) { + case EnterNotify: + case LeaveNotify: { + return gfx::Point(native_event->xcrossing.x_root, + native_event->xcrossing.y_root); + } case ButtonPress: case ButtonRelease: { return gfx::Point(native_event->xbutton.x_root, @@ -897,7 +905,9 @@ KeyboardCode KeyboardCodeFromNative(const base::NativeEvent& native_event) { } bool IsMouseEvent(const base::NativeEvent& native_event) { - if (native_event->type == ButtonPress || + if (native_event->type == EnterNotify || + native_event->type == LeaveNotify || + native_event->type == ButtonPress || native_event->type == ButtonRelease || native_event->type == MotionNotify) return true; diff --git a/ui/base/x/events_x_unittest.cc b/ui/base/x/events_x_unittest.cc index 422e669..d67f4b7 100644 --- a/ui/base/x/events_x_unittest.cc +++ b/ui/base/x/events_x_unittest.cc @@ -112,4 +112,26 @@ TEST(EventsXTest, AvoidExtraEventsOnWheelRelease) { // TODO(derat): Test XInput code. } +TEST(EventsXTest, EnterLeaveEvent) { + XEvent event; + event.xcrossing.type = EnterNotify; + event.xcrossing.x = 10; + event.xcrossing.y = 20; + event.xcrossing.x_root = 110; + event.xcrossing.y_root = 120; + + EXPECT_EQ(ui::ET_MOUSE_ENTERED, ui::EventTypeFromNative(&event)); + EXPECT_EQ("10,20", ui::EventLocationFromNative(&event).ToString()); + EXPECT_EQ("110,120", ui::EventSystemLocationFromNative(&event).ToString()); + + event.xcrossing.type = LeaveNotify; + event.xcrossing.x = 30; + event.xcrossing.y = 40; + event.xcrossing.x_root = 230; + event.xcrossing.y_root = 240; + EXPECT_EQ(ui::ET_MOUSE_EXITED, ui::EventTypeFromNative(&event)); + EXPECT_EQ("30,40", ui::EventLocationFromNative(&event).ToString()); + EXPECT_EQ("230,240", ui::EventSystemLocationFromNative(&event).ToString()); +} + } // namespace ui |