Gate the FX reclaimer on the transport, both directions; move the release's persist off the drain and onto the project save

The drain no longer dirties a project on its own initiative — a spent park record rides the user's next save via OnSaveExtensionConfig.
This commit is contained in:
2026-08-06 22:31:47 -04:00
parent 224dcf84df
commit 02790f1270
6 changed files with 288 additions and 79 deletions
+10
View File
@@ -211,6 +211,16 @@ bool ReaSamplerSession::saveViewStateOnly() {
return true;
}
// Its twin bar the dirty mark — the one line that differs is the whole point of the
// split, so the two stay spelled out rather than folded behind a flag.
bool ReaSamplerSession::flushViewState() {
ReaProject* proj = activeSavedProject();
if (!proj) return false;
writeViewState(proj, view_);
return true;
}
bool ReaSamplerSession::writeAssignmentRequest(const std::string& wire) {
ReaProject* proj = activeSavedProject();
if (!proj) return false;
+7
View File
@@ -144,6 +144,13 @@ public:
// Returns on the SAME rule as saveToActiveProject above, prohibition included.
bool saveViewStateOnly();
// The same write with the dirty mark OMITTED, for a caller already inside REAPER's
// own project save: marking dirty there would leave the project modified the instant
// it was saved, which is the whole reason that caller exists (fx_reclaim's
// ReleaseFlush). Not a general-purpose sibling — a mutation site that skips the dirty
// mark silently loses its write when the user closes without saving.
bool flushViewState();
// Report-only prune dry-run: feeds the pure core with (present, referenced,
// owned) — `present` from the folder enumeration, the other two from the
// tracking authority. FAIL-SAFE: tracking state the authority cannot read