compositor-x11: Fix relative motion reporting for multiple outputs
diff --git a/src/compositor-x11.c b/src/compositor-x11.c
index 8e052dd..a95c1fb 100644
--- a/src/compositor-x11.c
+++ b/src/compositor-x11.c
@@ -90,8 +90,8 @@
 	/* We could map multi-pointer X to multiple wayland seats, but
 	 * for now we only support core X input. */
 	struct weston_seat		 core_seat;
-	int				 prev_x;
-	int				 prev_y;
+	wl_fixed_t			 prev_x;
+	wl_fixed_t			 prev_y;
 
 	struct {
 		xcb_atom_t		 wm_protocols;
@@ -1010,13 +1010,15 @@
 	if (!c->has_xkb)
 		update_xkb_state_from_core(c, motion_notify->state);
 	output = x11_compositor_find_output(c, motion_notify->event);
-	x = wl_fixed_from_int(motion_notify->event_x - c->prev_x);
-	y = wl_fixed_from_int(motion_notify->event_y - c->prev_y);
-	c->prev_x = motion_notify->event_x;
-	c->prev_y = motion_notify->event_y;
+	x = wl_fixed_from_int(motion_notify->event_x);
+	y = wl_fixed_from_int(motion_notify->event_y);
 	x11_output_transform_coordinate(output, &x, &y);
 
-	notify_motion(&c->core_seat, weston_compositor_get_time(), x, y);
+	notify_motion(&c->core_seat, weston_compositor_get_time(),
+		      x - c->prev_x, y - c->prev_y);
+
+	c->prev_x = x;
+	c->prev_y = y;
 }
 
 static void
@@ -1033,13 +1035,14 @@
 	if (!c->has_xkb)
 		update_xkb_state_from_core(c, enter_notify->state);
 	output = x11_compositor_find_output(c, enter_notify->event);
-	c->prev_x = enter_notify->event_x;
-	c->prev_y = enter_notify->event_y;
 	x = wl_fixed_from_int(enter_notify->event_x);
 	y = wl_fixed_from_int(enter_notify->event_y);
 	x11_output_transform_coordinate(output, &x, &y);
 
 	notify_pointer_focus(&c->core_seat, &output->base, x, y);
+
+	c->prev_x = x;
+	c->prev_y = y;
 }
 
 static int