Key changes in wl_backend.c:
- wl_atom_intern: call XInternAtom on XWayland display (was returning 0)
- Add wl_or_view struct to track override_redirect XWayland surfaces
- handle_xwayland_new_surface: composite OR surfaces via scene graph
- frame_create_toplevel/child: create real X11 windows on XWayland
- frame_destroy/configure: delegate to Xlib
- window_map/unmap/move/resize: fall through to Xlib for frame windows
- stacking_raise/lower: update scene graph + Xlib fallback
- event_flush/sync: call XFlush/XSync on XWayland display
- window_set_border/border_width/clear: delegate to Xlib
- window_get_rect: query XWayland geometry for non-toplevel windows
Note: frame creation via XWayland is a temporary bridge. The correct
architectural approach is native scene-buffer rendering with pixman.
wWorkspaceMapUpdate calls XGetImage(dpy) and RCreateImageFromXImage
(scr->rcontext) directly; both are NULL in the Wayland path. Add
early-return guards so enabling the workspace pager in Wayland mode
does not crash.
set_workspace_map_background_image calls RConvertImageMask(scr->rcontext)
for pixmap textures; guard that path with the same rcontext check.
wl_window_get_icon_name was a stub returning False. Implement it to
return the XDG toplevel title so window icon labels are populated on
the Wayland path (Wayland has no separate WM_ICON_NAME concept).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>