/* 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;
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
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
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,