added loading screen
This commit is contained in:
1 parent
881b52748e
commit
50a1ddca62
10 files changed
+249
-1
No files matched your search
@@ -390,3 +390,25 @@ Part of [CLAUDE.md](../../CLAUDE.md). These are rules that cost a defect to lear
|
||||
worth knowing: the line composes on its own cadence, so a notice can appear a beat after it was set (do not
|
||||
read the label in the same tick a handler ran), and a refusal should say what to *do* about it -- "drop it on
|
||||
another plot, or add a row with the layout editor (L)" rather than the bare statement of the limit.
|
||||
|
||||
- **The status line cannot cover the gap before the window exists, so a window does.** Between the chooser
|
||||
closing and `gtk_window_present()` there is no main loop at all: the chooser destroyed its own window,
|
||||
then `main()` allocates the sample buffer, waits for the first CONFIG or reads a recording, and
|
||||
`on_activate()` builds every panel -- at a few gigabytes of buffer that is the ten seconds a user reported
|
||||
as "the dialog disappeared and nothing happened". `loading_show()`/`loading_hide()` (in
|
||||
`source_dialog.cpp`, beside the chooser they continue) keep an `AdwWindow` on screen across it, raised in
|
||||
`main()` **before** the model is constructed and taken down in `on_activate()` **after** the present --
|
||||
either side is a frame of empty screen. Three rules it exists under:
|
||||
- **It must be painted before the caller blocks.** `gtk_window_present()` only queues the frame, and
|
||||
nothing after it runs a loop, so `loading_show()` ends in a nested `GMainLoop` quit by a timeout
|
||||
(the chooser's own idiom). Iterating pending events is *not* enough: a window needs a frame-clock
|
||||
cycle, and the frame clock only ticks while a loop runs.
|
||||
- **It says what the wait is, in words.** The spinner is frozen for the whole of it -- no loop -- and a
|
||||
progress bar would be a lie for the same reason, so the text carries the information: the address
|
||||
being connected to or the file being opened, and under it the buffer size, which is the number that
|
||||
explains the duration. It is `deletable=0` with no title buttons: a close button that cannot be
|
||||
serviced until the work is over is worse than none.
|
||||
- **Only the path that *asked* gets one.** `main()` raises it only when the chooser actually ran, which
|
||||
is why every documented probe (all of them pass `--server`) is on exactly the path it was before --
|
||||
and a `--server` run never had a window to lose, so the post-present notice is the right place for it.
|
||||
`loading_hide()` is a no-op when none is up, so `run_ui()` needs no notion of which path it is on.
|
||||
Reference in new issue
Block a user