diff --git a/src/video/wayland/SDL_waylandevents.c b/src/video/wayland/SDL_waylandevents.c index 5a9bef048f..ff50b51e91 100644 --- a/src/video/wayland/SDL_waylandevents.c +++ b/src/video/wayland/SDL_waylandevents.c @@ -1187,19 +1187,21 @@ static void pointer_handle_axis_relative_direction(void *data, struct wl_pointer static void pointer_dispatch_relative_motion(SDL_WaylandSeat *seat) { SDL_WindowData *window = seat->pointer.focus; - SDL_Mouse *mouse = SDL_GetMouse(); - double dx; - double dy; - if (mouse->InputTransform || !mouse->enable_relative_system_scale) { - dx = wl_fixed_to_double(seat->pointer.pending_frame.relative.dx_unaccel); - dy = wl_fixed_to_double(seat->pointer.pending_frame.relative.dy_unaccel); - } else { - dx = wl_fixed_to_double(seat->pointer.pending_frame.relative.dx) * window->pointer_scale.x; - dy = wl_fixed_to_double(seat->pointer.pending_frame.relative.dy) * window->pointer_scale.y; + if (window) { + SDL_Mouse *mouse = SDL_GetMouse(); + double dx; + double dy; + if (mouse->InputTransform || !mouse->enable_relative_system_scale) { + dx = wl_fixed_to_double(seat->pointer.pending_frame.relative.dx_unaccel); + dy = wl_fixed_to_double(seat->pointer.pending_frame.relative.dy_unaccel); + } else { + dx = wl_fixed_to_double(seat->pointer.pending_frame.relative.dx) * window->pointer_scale.x; + dy = wl_fixed_to_double(seat->pointer.pending_frame.relative.dy) * window->pointer_scale.y; + } + + SDL_SendMouseMotion(seat->pointer.pending_frame.timestamp_ns, window->sdlwindow, seat->pointer.sdl_id, true, (float)dx, (float)dy); } - - SDL_SendMouseMotion(seat->pointer.pending_frame.timestamp_ns, window->sdlwindow, seat->pointer.sdl_id, true, (float)dx, (float)dy); } static void pointer_dispatch_axis(SDL_WaylandSeat *seat)