Add a compositor-side pointer grab so clients can interactively move and
resize their windows. When an XDG toplevel sends request_move or
request_resize, the compositor records the current pointer position and
window geometry, then routes all subsequent motion events directly to
wl_grab_apply_motion() instead of the normal pointer-focus path.
- wl_grab_begin_move / wl_grab_begin_resize: snapshot grab origin,
clear seat pointer focus so the client stops receiving motion events.
- wl_grab_apply_motion: on every motion event, compute dx/dy from the
grab origin and reposition (MOVE) or stretch (RESIZE) the scene node.
Resize honours all WL_SHELL_SURFACE_RESIZE_* edge combinations.
Minimum window size clamped to 32×32 px. XWayland windows use
wlr_xwayland_surface_configure; XDG toplevels use set_size + schedule_configure.
- wl_grab_end: clears grab state; any button release while a grab is
active ends it and resumes normal pointer-focus delivery.
- grab_type, grab_view, grab_start_{ptr,win}_{x,y,w,h}, grab_resize_edges
added to wl_compositor_state.
Smoke test: build-only check added (no existing test client emits
request_move); all 22/22 checks continue to pass.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>