Wire up wlr_cursor and wlr_xcursor_manager so the cursor is visible when
running as a nested Wayland compositor.
- wlr_cursor created in wl_display_open and attached to the output layout.
- wlr_xcursor_manager created with NULL (system default) theme at 24 px
base size; wlr_xcursor_manager_load called at scale 1.0 at open time.
- In handle_backend_new_output, after the output joins the layout:
- Load xcursor at the output's actual scale factor.
- Set "left_ptr" as the initial cursor image.
- Warp the hardware cursor to the current virtual pointer position.
In nested mode this causes wlroots to send wl_pointer.set_cursor to
the host compositor, making the cursor visible in the window.
- All pointer motion handlers (relative, absolute) and wl_pointer_warp /
wl_pointer_warp_to now call wlr_cursor_warp after updating pointer_x/y,
keeping the hardware cursor in sync with the virtual pointer position.
handle_pointer_motion_absolute uses wlr_cursor_warp_absolute and reads
back cursor->x/y for the pixel position (correct in all output layouts).
- Grab cursor shapes: wl_grab_begin_move sets "fleur"; wl_grab_begin_resize
selects an edge-appropriate name (nw-resize, se-resize, etc.) via a new
resize_edges_to_cursor() helper; wl_grab_end restores "left_ptr".
- wl_display_close destroys xcursor_mgr then cursor before display teardown.
Smoke test: new "cursor check" verifies "cursor created" + "cursor image
set to 'left_ptr'" log lines (23/23 checks pass).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>