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
diff --git a/src/compositor.c b/src/compositor.c
index d339472..b846d8e 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -2078,15 +2078,8 @@
 	struct wl_pointer *pointer = seat->seat.pointer;
 
 	if (output) {
-		clip_pointer_motion(seat, &x, &y);
-		weston_seat_update_drag_surface(seat,
-						x - pointer->x,
-						y - pointer->y);
-
-		pointer->x = x;
-		pointer->y = y;
+		move_pointer(seat, x, y);
 		compositor->focus = 1;
-		weston_compositor_repick(compositor);
 	} else {
 		compositor->focus = 0;
 		/* FIXME: We should call wl_pointer_set_focus(seat,