summaryrefslogtreecommitdiffstats
path: root/ui/base/x
diff options
context:
space:
mode:
authoroshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-03 00:23:40 +0000
committeroshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-03 00:23:40 +0000
commit7ec601db8b4224011d2e7a66a730d809f4c32ae8 (patch)
tree4f67bf8caf686ea61d9ccf984153607d2d51aef0 /ui/base/x
parent543889ca84a0cf564c113ed5d2b49d8e948e7b71 (diff)
downloadchromium_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.cc12
-rw-r--r--ui/base/x/events_x_unittest.cc22
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