From 276a70a84fed5be229c12546df1ac393158a4ec9 Mon Sep 17 00:00:00 2001 From: Berke Güzel Date: Tue, 13 Oct 2026 16:23:07 +0300 Subject: Implement relative pointer mode on Wayland yasl_surface_set_pointer_mode(YASL_POINTER_RELATIVE) now takes a persistent zwp_locked_pointer_v1 on the surface and hides its cursor. While the compositor keeps the lock engaged, zwp_relative_pointer_v1 motion is pushed as POINTER_MOTION with pos frozen and delta in device pixels. When the lock disengages, as on focus loss, motion is absolute again with a delta derived by the input queue. The lock follows the pointer's seat: it moves to another seat when its seat loses the pointer, and is released on NORMAL and on surface destruction. Compositors without both protocols return false. Co-Authored-By: Claude Opus 5.5 --- include/yasl/yasl.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'include/yasl/yasl.h') diff --git a/include/yasl/yasl.h b/include/yasl/yasl.h index 22ed308..de9a62c 100644 --- a/include/yasl/yasl.h +++ b/include/yasl/yasl.h @@ -757,10 +757,12 @@ YASL_API bool yasl_surface_poll_event(struct yasl_surface *s, struct yasl_event * Select absolute or relative (locked) pointer input for a surface. * @param s Surface. * @param mode YASL_POINTER_NORMAL or YASL_POINTER_RELATIVE. - * @return true if the mode is supported by the backend; false leaves NORMAL. + * @return true if the mode is supported; false leaves the current mode. * RELATIVE hides the cursor and locks it while the surface is focused; * POINTER_MOTION then carries unbounded delta. Returning to NORMAL restores - * the cursor selected with yasl_surface_set_cursor(). + * the cursor selected with yasl_surface_set_cursor(). RELATIVE is supported on + * Wayland compositors with the relative-pointer and pointer-constraints + * protocols; X11 and Cocoa return false. */ YASL_API bool yasl_surface_set_pointer_mode(struct yasl_surface *s, enum yasl_pointer_mode mode); -- cgit v1.2.3