The existing SetCursorPos implementation abuses zwp_locked_pointer_v1's set_cursor_position_hint side-effect: it briefly locks the pointer, sets the position hint, then unlocks. The compositor clamps position hints to locked-surface bounds, so warps to coordinates outside that area are silently dropped, and the lock/unlock cycle has subtle timing and side-effect issues. wp_pointer_warp_v1 is a staging protocol added in wayland-protocols 1.45 (June 2025) that provides a direct cursor-warp primitive without requiring pointer locking. KWin \>=6.4, Mutter \>=49, and wlroots \>=0.19 already implement it on the compositor side. This MR adds support to winewayland.drv: when the compositor advertises the global and we have a recent enter serial, the new path is used; otherwise we fall back to the existing lock/hint workaround. ## Testing - KWin 6.6.4 (Plasma Wayland): protocol advertised, new path fires (verified via `WINEDEBUG=+waylanddrv` showing the new `warp_pointer hwnd=...` TRACE). - niri 26.04 (no protocol support): fallback path fires unchanged. - Fallback else-branch is byte-equivalent to upstream master (only `pending_warp = FALSE` was hoisted out of the if-block). ## References - Protocol spec: https://wayland.app/protocols/pointer-warp-v1 - Existing workaround MR: !7353 (cc @atticf — thanks for the original workaround that this MR complements) - SDL adoption: libsdl-org/SDL #10922 -- https://gitlab.winehq.org/wine/wine/-/merge_requests/10830