help: default the contextual layer off, and carry the help into the chooser
The contextual help was on by default, so a first run met a window with a "?" beside every surface it had not asked to have explained; `contextual_help` now defaults to false and the layer is asked for from the Help menu, from the chooser's new help menu, or with Ctrl+H. The source chooser runs before `App` exists, which makes it the window a user who does not know how to start is looking at, so it now carries the same three help affordances the window's Help view does: Documentation (the manual is another process and needs nothing of the app), Enable contextual help (a row whose check *is* the setting, written to the file the app reads a moment later), and Guided tour. The tour is drawn on the app's own window, so the chooser can only record the wish: it sets `Config::tour_pending` -- the value `main()` owns and hands to both `choose_source()` and `run_ui()` -- and `on_activate()` starts it once the window is up and laid out, through its own callback so the readings can tell a request from the first-run auto-start. The rows are the window's own `menu_button()`/`menu_toggle()`; `install_css()` therefore runs from `choose_source()` (it is idempotent now) so the popover gets the `.udpscope-menu` rules before it is shown. Opening the manual could also fail with a message that blamed the handler whatever was missing. `help_installed_path()` now resolves `help:<id>` the way the specification does and the failure alert says which of the two it is: with the set installed it names the viewer, without it it names the identifier, the expected installed path and the install command. `show_help()` gained an optional reporter, which `UDPSCOPE_PROBE_HELP_MS` uses for a new reading -- `[help] launch attempted= done= ok= error='' installed=` -- since a successful launch leaves no window of ours to observe. Tested: clean --clean-first build, three warnings as documented; test-ui 13/13 and test-help pass; no Gtk-CRITICAL in the help, helpui and chooser runs.
This commit is contained in:
1 parent
e140642ed0
commit
d8a79b96ba
15 files changed
+461
-66
No files matched your search
@@ -255,6 +255,18 @@ struct App {
|
||||
/// The first-run auto-start: set by the timer that fires it, and read by the probe and the dump.
|
||||
/// The decision itself is `settings.tour_seen`, which is the whole of "this has happened before".
|
||||
bool tour_auto_started = false;
|
||||
/// The chooser's own "Guided tour" request (`Config::tour_pending`), recorded when its timer runs.
|
||||
/// A separate flag from the auto-start because it is a *different* thing: the user asked for the
|
||||
/// tour before the window existed, rather than never having seen it.
|
||||
bool tour_requested = false;
|
||||
/// The self-check's reading of the manual's launch (`UDPSCOPE_PROBE_HELP_MS`). The launch is
|
||||
/// asynchronous and the viewer is another process, so the outcome arrives in a callback and the
|
||||
/// probe prints it from a timer afterwards; `attempted` is set at the call, because a launch that
|
||||
/// never called back is itself a reading.
|
||||
bool dbg_help_launch_attempted = false;
|
||||
bool dbg_help_launch_done = false;
|
||||
bool dbg_help_launch_ok = false;
|
||||
std::string dbg_help_launch_error;
|
||||
/// The help layer's own dump readings, captured on the tick while the window is alive (nothing
|
||||
/// here may be read in the dump -- see `docs/claude/verification.md`).
|
||||
std::string dbg_context_help;
|
||||
@@ -1743,6 +1755,10 @@ int tour_step_count(const App& app);
|
||||
int tour_step_index(const App& app);
|
||||
/// The first-run auto-start's callback, scheduled only when `settings.tour_seen` is false.
|
||||
gboolean tour_autostart(gpointer user);
|
||||
/// The chooser's "Guided tour" request (`Config::tour_pending`): the same delayed start, but it
|
||||
/// sets `tour_requested` rather than `tour_auto_started`, so the probe and the dump can tell the two
|
||||
/// apart. Scheduled only when the config carries the request.
|
||||
gboolean tour_start_requested(gpointer user);
|
||||
/// Captures the layer's own readings and the bounds of the surfaces the help's figures label, while
|
||||
/// the window is alive -- the dump runs after it is destroyed and may not ask GTK anything.
|
||||
void capture_help_state(App& app);
|
||||
|
||||
Reference in new issue
Block a user