Check if client understands wl_pointer::frame

Fixes a crash in SDL2 applications when using locked pointer.

SDL2 expects a wl_pointer v1 interface and doesn't provide a handler for
the wl_pointer::frame event. This results in a "listener function for
opcode 5 of wl_pointer is NULL" abort in wayland-client.

Tested on Xonotic v0.8.2 with libSDL2 v2.0.9. Xonotic needs to be ran
with "SDL_VIDEODRIVER=wayland xonotic-sdl" for SDL2 to use the wayland
backend.
This commit is contained in:
Ilya Trukhanov 2019-01-22 17:25:22 +02:00
parent b619ab4d34
commit c4ce3d0a49

View file

@ -271,6 +271,9 @@ void wlr_relative_pointer_manager_v1_send_relative_motion(
(uint32_t)(time_msec >> 32), (uint32_t)time_msec, (uint32_t)(time_msec >> 32), (uint32_t)time_msec,
wl_fixed_from_double(dx), wl_fixed_from_double(dy), wl_fixed_from_double(dx), wl_fixed_from_double(dy),
wl_fixed_from_double(dx_unaccel), wl_fixed_from_double(dy_unaccel)); wl_fixed_from_double(dx_unaccel), wl_fixed_from_double(dy_unaccel));
uint32_t version = wl_resource_get_version(pointer->resource);
if (version >= WL_POINTER_FRAME_SINCE_VERSION) {
wl_pointer_send_frame(pointer->pointer_resource); wl_pointer_send_frame(pointer->pointer_resource);
} }
} }
}