Design View: no undo block may open over the reclaim span, and a reapply closes none

Every opener ends the span first, so a tag fired mid-drain no longer hijacks the
switch's point. One stated criterion governs both lane sites; no-op actions discard.
This commit is contained in:
2026-08-07 15:13:52 -04:00
parent 39529a5ac4
commit b2f6b3f1d0
9 changed files with 210 additions and 76 deletions
+6
View File
@@ -21,6 +21,7 @@
#include "shell/capture/track_guid.h" // guidString
#include "shell/panel/panel_input.h" // bankPanelTailSetting
#include "shell/persist/session.h"
#include "shell/view/fx_reclaim.h" // fxReclaimEndUndoSpan
#include "shell/view/view.h" // applyMode
#include "shell/view/view_lanes.h" // mintManagedLanes
@@ -133,6 +134,11 @@ void RunRenderTrackInPlace(ReaSamplerSession& session) {
// visible — never to choose a tag. Both tags below are absolute.
const std::string activeMode = session.view().activeModeId();
// A mode switch fired seconds ago has left the FX reclaimer's undo span open, and
// no block may open over it — mechanism in src/shell/view/CLAUDE.md. Ending it here
// mints the switch's point, whole, before this block exists; idempotent otherwise.
fxReclaimEndUndoSpan();
Undo_BeginBlock2(nullptr);
// flags = 0, never 1: flags&1 adds default envelopes/FX, and a default chain