The DeviceEvent::MouseMotion events are not being sent to the EventLoop on Wayland. I tracked it down implement_relative_pointer never being called. This was in turn caused by the relative_pointer_manager_proxy not being set on the SeatData object. In the end it turns out that "zwp_relative_pointer_manager_v1" GlobalEvent was fired after the relevant "wl_seat" GlobalEvent.