From 2b171fd5010379a8674afa012245fea5a590e472 Mon Sep 17 00:00:00 2001 From: Guido Cella Date: Mon, 11 Mar 2024 19:01:13 +0100 Subject: fix virtual pointers When motionabsolute() is called from warpd, event->time_msec is 0, so motionnotify() doesn't call wlr_cursor_move(). Fix this by explicitly warping the cursor in this case, like it was done before implementing pointer constraints. I don't know if this is a bug in warpd or time_msec is always 0 with virtual pointers, since the only other software that uses the virtual pointer protocol I know of is wl-kbptr, and I can't get that to work with dwl at all. --- dwl.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dwl.c b/dwl.c index d508d79..5867b0c 100644 --- a/dwl.c +++ b/dwl.c @@ -1675,6 +1675,9 @@ motionabsolute(struct wl_listener *listener, void *data) struct wlr_pointer_motion_absolute_event *event = data; double lx, ly, dx, dy; + if (!event->time_msec) /* this is 0 with virtual pointers */ + wlr_cursor_warp_absolute(cursor, &event->pointer->base, event->x, event->y); + wlr_cursor_absolute_to_layout_coords(cursor, &event->pointer->base, event->x, event->y, &lx, &ly); dx = lx - cursor->x; dy = ly - cursor->y; -- cgit v1.2.3