Lightningbeam/lightningbeam-ui/lightningbeam-editor/src
Skyler Lehmkuhl ba4395602d Make recording an undoable action; fixes MIDI recording not marking doc modified
Recording (audio and MIDI) mutated the document directly in the AudioEvent
handlers, outside the action system — so it was never undoable, and dirty-
tracking leaned on an ad-hoc `media_modified` flag that the MIDI stop handler
forgot to set (hence: recording a MIDI clip didn't trigger the save-on-close
prompt).

Recording is temporal (the clip streams into the document live over the take),
so it can't be applied by one synchronous execute(). Instead, commit the
finished take as an *already-applied* action:

- ActionExecutor::push_applied(action) — registers an action whose effect is
  already present (clears redo, bumps the epoch so the doc reads as modified,
  pushes to the undo stack) WITHOUT re-running execute()/execute_backend().
  Undo then removes the content via rollback/rollback_backend; redo re-adds it.
- AddClipInstanceAction::already_applied(...) — constructs the action pre-seeded
  into its post-execute state (executed + the existing backend clip id) so the
  first undo can remove the live-recorded clip from both doc and backend, and
  redo re-adds it through the normal path.
- Both recording stop handlers now finalize, then push_applied this action.
  Keeping the clip in the document (not a transient) matters for streaming-to-
  disk and keeps the doc the single source of truth.

Recordings now bump the epoch like every other edit, so the media_modified
flag is dropped for recordings (kept only as a defensive fallback if the action
can't be built). Whole workspace compiles; 299 core tests pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-11 19:23:46 -04:00
..
export Timeline types stage 2: fix editor seconds↔beats at every clip boundary 2026-07-11 14:10:38 -04:00
mobile Type the rest of the audio-controller boundary (no more bare-f64 wrapping) 2026-07-11 14:33:22 -04:00
panes Type AudioClip duration by clip kind; fix MIDI clips growing too fast 2026-07-11 19:23:37 -04:00
preferences Clean up build warnings 2026-07-09 13:24:32 -04:00
tools Add drawing tablet input support 2026-03-11 10:58:30 -04:00
widgets make sample load menus consistent 2026-02-16 19:12:21 -05:00
config.rs Fix FLAC export end-to-end (real backend path) + smart tag defaults 2026-07-09 13:09:54 -04:00
cqt_gpu.rs Add clip split and duplicate commands 2026-02-15 02:11:57 -05:00
curve_editor.rs Clean up build warnings 2026-06-21 16:48:59 -04:00
custom_cursor.rs Add tool skeletons 2026-03-06 07:22:50 -05:00
debug_overlay.rs Composite grouped/nested video on the GPU path 2026-06-22 17:38:30 -04:00
default_instrument.rs clean up some compiler warnings 2025-12-03 06:39:26 -05:00
effect_thumbnails.rs Fix gamma handling and improve brush canvas performance 2026-06-16 08:32:39 -04:00
gpu_brush.rs Address code-review findings across export, decode, and data model 2026-06-26 17:47:32 -04:00
gpu_timer.rs Composite grouped/nested video on the GPU path 2026-06-22 17:38:30 -04:00
hw_video.rs hw: surface import_raw failures (diagnose washed-out 10-bit HDR) 2026-06-26 03:59:39 -04:00
keymap.rs Onion skinning (raster): toggle + tinted ghosts of the active layer 2026-06-20 23:05:57 -04:00
main.rs Make recording an undoable action; fixes MIDI recording not marking doc modified 2026-07-11 19:23:46 -04:00
menu.rs Onion skinning (raster): toggle + tinted ghosts of the active layer 2026-06-20 23:05:57 -04:00
notifications.rs Address code-review findings across export, decode, and data model 2026-06-26 17:47:32 -04:00
nv12_blit.rs nv12: HDR-correct input — PQ/HLG EOTF + BT.2020→709 gamut (Stage A pt 1) 2026-06-26 02:47:09 -04:00
raster_tool.rs Clean up build warnings 2026-06-21 16:48:59 -04:00
sample_import.rs Repair test suite + fix sample key-range overlap bug 2026-06-23 19:07:06 -04:00
sample_import_dialog.rs Fit modal dialogs to the phone screen on mobile 2026-07-01 06:28:04 -04:00
svg_import.rs Address code-review findings across export, decode, and data model 2026-06-26 17:47:32 -04:00
tablet.rs fix build issues 2026-06-02 13:41:10 -04:00
test_mode.rs Clean up build warnings 2026-06-21 16:48:59 -04:00
theme.rs Unify colors via theme CSS variables; theme egui visuals 2026-07-01 07:08:00 -04:00
theme_render.rs Clean up build warnings 2026-06-21 16:48:59 -04:00
waveform_gpu.rs Stream audio & video from .beam container; waveform LOD pyramid + persistence 2026-06-17 13:52:38 -04:00