From c437d6f88655a22b3cc374debf7d3a409dcf1ccb Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sun, 23 Oct 2022 23:21:08 +0200 Subject: [PATCH] Commit TempoChange undo operation after map update Tempo Map updates can change a region's position/length, in which case region-automation may follow the region, and DiskReader:: playlist_ranges_moved will save additional undo information. These MementoCommand(s) need to be included in the undo operation. --- gtk2_ardour/editor_markers.cc | 6 +++--- gtk2_ardour/editor_ops.cc | 2 +- gtk2_ardour/editor_tempodisplay.cc | 22 +++++++++------------- share/scripts/s_tempo_map.lua | 4 ++++ 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/gtk2_ardour/editor_markers.cc b/gtk2_ardour/editor_markers.cc index 3983ea5065..a3221e8e14 100644 --- a/gtk2_ardour/editor_markers.cc +++ b/gtk2_ardour/editor_markers.cc @@ -1662,9 +1662,9 @@ Editor::toggle_tempo_type () XMLNode &after = tmap->get_state(); _session->add_command (new Temporal::TempoCommand (_("change tempo type"), &before, &after)); - commit_reversible_command (); TempoMap::update (tmap); + commit_reversible_command (); } } @@ -1696,9 +1696,9 @@ Editor::toggle_tempo_continues () XMLNode &after = tmap->get_state(); _session->add_command (new Temporal::TempoCommand (_("change tempo clamp"), &before, &after)); - commit_reversible_command (); TempoMap::update (tmap); + commit_reversible_command (); } void @@ -1729,9 +1729,9 @@ Editor::ramp_to_next_tempo () XMLNode &after = tmap->get_state(); _session->add_command (new Temporal::TempoCommand (_("changed tempo ramp"), &before, &after)); - commit_reversible_command (); TempoMap::update (tmap); + commit_reversible_command (); } void diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index eca8c1641f..b70a42ae81 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -7462,9 +7462,9 @@ Editor::define_one_bar (timepos_t const & start, timepos_t const & end) XMLNode& after (tmap->get_state()); _session->add_command (new Temporal::TempoCommand (_("set tempo from range"), &before, &after)); - commit_reversible_command (); TempoMap::update (tmap); + commit_reversible_command (); } void diff --git a/gtk2_ardour/editor_tempodisplay.cc b/gtk2_ardour/editor_tempodisplay.cc index 7b84a6f1ca..d72049d608 100644 --- a/gtk2_ardour/editor_tempodisplay.cc +++ b/gtk2_ardour/editor_tempodisplay.cc @@ -490,9 +490,8 @@ Editor::mouse_add_new_tempo_event (timepos_t pos) map->set_tempo (map->tempo_at (pos), pos); XMLNode &after = map->get_state(); _session->add_command (new Temporal::TempoCommand (_("add tempo"), &before, &after)); - commit_reversible_command (); - TempoMap::update (map); + commit_reversible_command (); } //map.dump (cerr); @@ -533,9 +532,9 @@ Editor::mouse_add_new_meter_event (timepos_t pos) map->set_meter (Meter (bpb, note_type), pos); _session->add_command (new Temporal::TempoCommand (_("add time signature"), &before, &map->get_state())); - commit_reversible_command (); TempoMap::update (map); + commit_reversible_command (); //map.dump (cerr); } @@ -579,9 +578,9 @@ Editor::mouse_add_bbt_marker_event (timepos_t pos) map->set_bartime (bbt, marker_dialog.position(), name); _session->add_command (new Temporal::TempoCommand (_("add BBT marker"), &before, &map->get_state())); - commit_reversible_command (); TempoMap::update (map); + commit_reversible_command (); } @@ -657,9 +656,9 @@ Editor::edit_meter_section (Temporal::MeterPoint& section) XMLNode &after = tmap->get_state(); _session->add_command (new Temporal::TempoCommand (_("edit time signature"), &before, &after)); - commit_reversible_command (); TempoMap::update (tmap); + commit_reversible_command (); } void @@ -693,9 +692,9 @@ Editor::edit_bbt (MusicTimePoint& point) XMLNode &after = tmap->get_state(); _session->add_command (new Temporal::TempoCommand (_("edit tempo"), &before, &after)); - commit_reversible_command (); TempoMap::update (tmap); + commit_reversible_command (); } void @@ -730,9 +729,9 @@ Editor::edit_tempo_section (TempoPoint& section) XMLNode &after = tmap->get_state(); _session->add_command (new Temporal::TempoCommand (_("edit tempo"), &before, &after)); - commit_reversible_command (); TempoMap::update (tmap); + commit_reversible_command (); } void @@ -762,9 +761,9 @@ Editor::real_remove_bbt_marker (MusicTimePoint const * point) tmap->remove_bartime (*point); XMLNode &after = tmap->get_state(); _session->add_command (new Temporal::TempoCommand (_("remove BBT marker"), &before, &after)); - commit_reversible_command (); TempoMap::update (tmap); + commit_reversible_command (); return FALSE; } @@ -778,10 +777,8 @@ Editor::real_remove_tempo_marker (TempoPoint const * section) tmap->remove_tempo (*section); XMLNode &after = tmap->get_state(); _session->add_command (new Temporal::TempoCommand (_("remove tempo change"), &before, &after)); - commit_reversible_command (); - TempoMap::update (tmap); - + commit_reversible_command (); return FALSE; } @@ -815,9 +812,8 @@ Editor::real_remove_meter_marker (Temporal::MeterPoint const * section) tmap->remove_meter (*section); XMLNode &after = tmap->get_state(); _session->add_command (new Temporal::TempoCommand (_("remove time signature change"), &before, &after)); - commit_reversible_command (); - TempoMap::update (tmap); + commit_reversible_command (); return FALSE; } diff --git a/share/scripts/s_tempo_map.lua b/share/scripts/s_tempo_map.lua index 9f88857c5c..cbaf483d44 100644 --- a/share/scripts/s_tempo_map.lua +++ b/share/scripts/s_tempo_map.lua @@ -13,7 +13,11 @@ function factory () return function () tm:set_tempo (Temporal.Tempo (140, 120, 4), Temporal.timepos_t (0)) tm:set_tempo (Temporal.Tempo (120, 80, 4), Temporal.timepos_t.from_ticks (Temporal.ticks_per_beat * 4)) tm:set_tempo (Temporal.Tempo (80, 80, 4), Temporal.timepos_t.from_ticks (Temporal.ticks_per_beat * 4)) + Session:begin_reversible_command ("Change Tempo Map") Temporal.TempoMap.update (tm) + if not Session:abort_empty_reversible_command () then + Session:commit_reversible_command (nil) + end tm = nil -- Abort Edit example