compositor: Support notifying with absolute position too

With evdev input devices that generate absolute positions we need to provide
an infrastructure in the compositor for supporting those.

Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=61997
diff --git a/src/compositor.c b/src/compositor.c
index 3e24295..d339472 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -1782,17 +1782,15 @@
 	}
 }
 
+/* Takes absolute values */
 static void
-move_pointer(struct weston_seat *seat, wl_fixed_t dx, wl_fixed_t dy)
+move_pointer(struct weston_seat *seat, wl_fixed_t x, wl_fixed_t y)
 {
 	struct weston_compositor *ec = seat->compositor;
 	struct wl_pointer *pointer = seat->seat.pointer;
 	struct weston_output *output;
-	wl_fixed_t x, y;
 	int32_t ix, iy;
 
-	x = pointer->x + dx;
-	y = pointer->y + dy;
 	clip_pointer_motion(seat, &x, &y);
 
 	weston_seat_update_drag_surface(seat, x - pointer->x, y - pointer->y);
@@ -1829,7 +1827,24 @@
 
 	weston_compositor_wake(ec);
 
-	move_pointer(seat, dx, dy);
+	move_pointer(seat, pointer->x + dx, pointer->y + dy);
+
+	interface = pointer->grab->interface;
+	interface->motion(pointer->grab, time,
+			  pointer->grab->x, pointer->grab->y);
+}
+
+WL_EXPORT void
+notify_motion_absolute(struct weston_seat *seat,
+		       uint32_t time, wl_fixed_t x, wl_fixed_t y)
+{
+	const struct wl_pointer_grab_interface *interface;
+	struct weston_compositor *ec = seat->compositor;
+	struct wl_pointer *pointer = seat->seat.pointer;
+
+	weston_compositor_wake(ec);
+
+	move_pointer(seat, x, y);
 
 	interface = pointer->grab->interface;
 	interface->motion(pointer->grab, time,