Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net>
---
 src/evdev.c    |  2 ++
 test/pointer.c | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 61 insertions(+)

diff --git a/src/evdev.c b/src/evdev.c
index 48c969d..f710d85 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -1865,6 +1865,8 @@ evdev_configure_device(struct evdev_device *device)
                        device->abs.fake_resolution = 1;
                device->abs.absinfo_x = libevdev_get_abs_info(evdev, ABS_X);
                device->abs.absinfo_y = libevdev_get_abs_info(evdev, ABS_Y);
+               device->abs.point.x = device->abs.absinfo_x->value;
+               device->abs.point.y = device->abs.absinfo_y->value;
 
                if (evdev_is_fake_mt_device(device)) {
                        udev_tags &= ~EVDEV_UDEV_TAG_TOUCHSCREEN;
diff --git a/test/pointer.c b/test/pointer.c
index cbc3802..9eebedd 100644
--- a/test/pointer.c
+++ b/test/pointer.c
@@ -170,6 +170,61 @@ START_TEST(pointer_motion_absolute)
 }
 END_TEST
 
+START_TEST(pointer_absolute_initial_state)
+{
+       struct litest_device *dev = litest_current_device();
+       struct libinput *libinput1, *libinput2;
+       struct libinput_event *ev1, *ev2;
+       struct libinput_event_pointer *p1, *p2;
+       int axis = _i; /* looped test */
+
+       dev = litest_current_device();
+       libinput1 = dev->libinput;
+       litest_touch_down(dev, 0, 40, 60);
+       litest_touch_up(dev, 0);
+
+       /* device is now on some x/y value */
+       litest_drain_events(libinput1);
+
+       libinput2 = litest_create_context();
+       libinput_path_add_device(libinput2,
+                                libevdev_uinput_get_devnode(dev->uinput));
+       litest_drain_events(libinput2);
+
+       if (axis == ABS_X)
+               litest_touch_down(dev, 0, 40, 70);
+       else
+               litest_touch_down(dev, 0, 70, 60);
+       litest_touch_up(dev, 0);
+
+       litest_wait_for_event(libinput1);
+       litest_wait_for_event(libinput2);
+
+       while (libinput_next_event_type(libinput1)) {
+               ev1 = libinput_get_event(libinput1);
+               ev2 = libinput_get_event(libinput2);
+
+               ck_assert_int_eq(libinput_event_get_type(ev1),
+                                LIBINPUT_EVENT_POINTER_MOTION_ABSOLUTE);
+               ck_assert_int_eq(libinput_event_get_type(ev1),
+                                libinput_event_get_type(ev2));
+
+               p1 = libinput_event_get_pointer_event(ev1);
+               p2 = libinput_event_get_pointer_event(ev2);
+
+               ck_assert_int_eq(libinput_event_pointer_get_absolute_x(p1),
+                                libinput_event_pointer_get_absolute_x(p2));
+               ck_assert_int_eq(libinput_event_pointer_get_absolute_y(p1),
+                                libinput_event_pointer_get_absolute_y(p2));
+
+               libinput_event_destroy(ev1);
+               libinput_event_destroy(ev2);
+       }
+
+       libinput_unref(libinput2);
+}
+END_TEST
+
 static void
 test_unaccel_event(struct litest_device *dev, int dx, int dy)
 {
@@ -1263,6 +1318,8 @@ END_TEST
 
 int main (int argc, char **argv)
 {
+       struct range axis_range = {ABS_X, ABS_Y + 1};
+
        litest_add("pointer:motion", pointer_motion_relative, LITEST_RELATIVE, 
LITEST_ANY);
        litest_add("pointer:motion", pointer_motion_absolute, LITEST_ABSOLUTE, 
LITEST_ANY);
        litest_add("pointer:motion", pointer_motion_unaccel, LITEST_RELATIVE, 
LITEST_ANY);
@@ -1300,5 +1357,7 @@ int main (int argc, char **argv)
        litest_add("pointer:middlebutton", middlebutton_default_touchpad, 
LITEST_TOUCHPAD, LITEST_CLICKPAD);
        litest_add("pointer:middlebutton", middlebutton_default_disabled, 
LITEST_ANY, LITEST_BUTTON);
 
+       litest_add_ranged("pointer:state", pointer_absolute_initial_state, 
LITEST_ABSOLUTE, LITEST_ANY, &axis_range);
+
        return litest_run(argc, argv);
 }
-- 
2.3.5

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to