Phase 26 — wl_subcompositor + primary selection (middle-click paste):
wl_subcompositor is already advertised by wlr_compositor_create (the
wlr_subcompositor is embedded in wlr_compositor); confirmed via weston-info.
zwp_primary_selection_device_manager_v1 created via
wlr_primary_selection_v1_device_manager_create(). seat.request_set_primary_
selection wired to handle_seat_request_primary_selection which calls
wlr_seat_set_primary_selection, so text selected in one client is available
for middle-click paste in any other client.
Phase 27 — zxdg_output_manager_v1:
wlr_xdg_output_manager_v1_create(display, output_layout) advertises the
xdg-output protocol. Panel clients (waybar, etc.) and HiDPI-aware apps
use this to query the logical position and size of each output, which may
differ from the physical pixel dimensions under scaling.
Phase 28 — zwp_idle_inhibit_manager_v1:
wlr_idle_inhibit_v1_create() advertises the idle-inhibit protocol. The
new_inhibitor signal is wired to handle_idle_new_inhibitor which logs the
event; the inhibitor list on wl_state.idle_inhibit_mgr can be queried by
a future idle/DPMS implementation to suppress screen blanking while any
inhibitor is live.
Smoke test: "protocols check" verifies all three startup log lines; the
weston-info globals check now also asserts wl_subcompositor,
zwp_primary_selection_device_manager_v1, zxdg_output_manager_v1, and
zwp_idle_inhibit_manager_v1 are present (25/25 checks pass).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>