| 2345 | } |
| 2346 | |
| 2347 | void MainWindow::broadcastTrackerTimeToVisible(double display_seconds) { |
| 2348 | // Per-tick playback/scrub fan-out: only the active top-level tab is on screen, so |
| 2349 | // forEachVisibleDock skips every other tab's docks — a hidden-tab plot's replot |
| 2350 | // still does the full canvas work (and, on an RHI window, the per-frame composite) |
| 2351 | // for nothing. This is the temporal cap's spatial sibling: cap-the-rate (broadcast |
| 2352 | // throttle) x skip-the-invisible (here). Structural seeds keep using |
| 2353 | // broadcastTrackerTime() (ALL tabs) so a hidden tab is correct the instant it is |
| 2354 | // revealed, and the currentTabChanged handler re-seeds the newly active tab. |
| 2355 | forEachVisibleDock([display_seconds](DockWidget* dock) { dock->onTrackerTime(display_seconds); }); |
| 2356 | ui_->curveListPanel->refreshValues(display_seconds); |
| 2357 | } |
| 2358 | |
| 2359 | void MainWindow::forEachSceneDock(const std::function<void(SceneDockWidget*)>& operation) { |
| 2360 | forEachDock([&operation](DockWidget* dock) { |
nothing calls this directly
no test coverage detected