diff --git a/hw/xwayland/xwayland-input.c b/hw/xwayland/xwayland-input.c index b1413b11f..3e4fe2b91 100644 --- a/hw/xwayland/xwayland-input.c +++ b/hw/xwayland/xwayland-input.c @@ -92,6 +92,15 @@ xwl_pointer_control(DeviceIntPtr device, PtrCtrl *ctrl) /* Nothing to do, dix handles all settings */ } +static DeviceIntPtr +get_pointer_device(struct xwl_seat *xwl_seat) +{ + if (xwl_seat->relative_pointer) + return xwl_seat->relative_pointer; + else + return xwl_seat->pointer; +} + static Bool init_pointer_buttons(DeviceIntPtr device) { @@ -396,7 +405,7 @@ pointer_handle_enter(void *data, struct wl_pointer *pointer, wl_fixed_t sx_w, wl_fixed_t sy_w) { struct xwl_seat *xwl_seat = data; - DeviceIntPtr dev = xwl_seat->pointer; + DeviceIntPtr dev = get_pointer_device(xwl_seat); DeviceIntPtr master; int i; int sx = wl_fixed_to_int(sx_w); @@ -471,7 +480,7 @@ pointer_handle_leave(void *data, struct wl_pointer *pointer, uint32_t serial, struct wl_surface *surface) { struct xwl_seat *xwl_seat = data; - DeviceIntPtr dev = xwl_seat->pointer; + DeviceIntPtr dev = get_pointer_device(xwl_seat); xwl_seat->xwl_screen->serial = serial; @@ -619,7 +628,7 @@ pointer_handle_button(void *data, struct wl_pointer *pointer, uint32_t serial, } valuator_mask_zero(&mask); - QueuePointerEvents(xwl_seat->pointer, + QueuePointerEvents(get_pointer_device(xwl_seat), state ? ButtonPress : ButtonRelease, index, 0, &mask); } @@ -661,7 +670,9 @@ pointer_handle_axis(void *data, struct wl_pointer *pointer, } else { valuator_mask_set_double(&mask, index, wl_fixed_to_double(value) / divisor); } - QueuePointerEvents(xwl_seat->pointer, MotionNotify, 0, POINTER_RELATIVE, &mask); + + QueuePointerEvents(get_pointer_device(xwl_seat), + MotionNotify, 0, POINTER_RELATIVE, &mask); } static void