[client] cursor: restore Wayland edge synchronization

Keep guest-to-host pointer synchronization active while an attempted
surface exit is blocked by the edge of a Wayland output. Continue
forwarding relative motion and wait for wl_pointer.leave before marking
the cursor outside the window.

Distinguish whole-surface releases from exits into letterbox space so
the expected asynchronous release callback cannot disable the feedback
loop before the pointer is confined again.

Treat Wayland pointer capability loss as a real leave so an unrelated
inactive callback cannot be mistaken for the intentional release.
This commit is contained in:
Geoffrey McRae
2026-08-06 20:24:13 +10:00
parent 5cc7f06185
commit e4874ee32d
6 changed files with 134 additions and 0 deletions

View File

@@ -301,6 +301,9 @@ struct CursorState
/* true if a pointer exit is waiting for confinement to release */
bool exit;
/* true if a Wayland surface exit is waiting for a real leave */
bool surfaceExit;
/* the local pointer exit target */
struct DoublePoint exitPos;