One more view: "troubleshoot-wizard" opens ui::troubleshoot_wizard
directly (normally only reachable via Home's "Something's wrong?"
button), using the same on_build-hook pattern as breadbar/breadman's
add-dialogs — open() now takes a callback run before .present(), the
only point connect_map can still catch the map. The real call site
(ui::home) passes a no-op.
Deliberately not covered: the onboarding tour (ui::tour) — it's a live,
multi-step walkthrough that overlays callouts on the real desktop as the
user does real things, which has no meaningful single-screenshot
representation in an isolated environment with no real desktop for it
to point at. guide_view and keybind_viewer aren't separate views either
— both render embedded inside the Learn/Home tabs already captured.
Three views ("home", "learn", "ask") — one per tab in the Home/Learn/Ask
Stack, switched via the same set_visible_child_name the tab switcher
itself uses, then captured as a full known-size canvas (the window is a
plain top-level, not layer-shell).
Plumbed through breadhelp's own cli::Action/parse() (three more fields,
same shape as force_onboard/autostart/suggest) rather than clap, matching
the app's existing non-clap idiom.
The HANDLES_COMMAND_LINE + thread_local HANDLE singleton architecture
needed one addition beyond the usual NON_UNIQUE-flag fix: every
invocation (including a --screenshot one) normally forwards to the
already-built window over D-Bus and reuses it — worse than the plain
GApplication case in the other apps, since here it's not just "message
the existing instance" but literally switching tabs on and re-capturing
the operator's real, live help-center window. NON_UNIQUE is now set
whenever --screenshot is present in argv (checked before the
Application is even built, since cli::parse() only runs per-invocation
inside connect_command_line).