diff options
author | nick_m <mainsbridge@gmail.com> | 2016-07-04 01:12:55 +1000 |
---|---|---|
committer | nick_m <mainsbridge@gmail.com> | 2016-07-10 02:18:37 +1000 |
commit | 0bdbe56cf16cb2abaee65adc682830806e9d8940 (patch) | |
tree | 4ea110222eb772dec36cb4bd2e920108ad04ebcd /gtk2_ardour/editor_markers.cc | |
parent | 828cb52f86410da447cb93e5033ccaf4ea43b4cc (diff) |
Stop passing references to things that may disappear when a metric section is replaced.
Diffstat (limited to 'gtk2_ardour/editor_markers.cc')
-rw-r--r-- | gtk2_ardour/editor_markers.cc | 32 |
1 files changed, 24 insertions, 8 deletions
diff --git a/gtk2_ardour/editor_markers.cc b/gtk2_ardour/editor_markers.cc index 9808777083..71b4744d95 100644 --- a/gtk2_ardour/editor_markers.cc +++ b/gtk2_ardour/editor_markers.cc @@ -1391,20 +1391,30 @@ Editor::toggle_marker_lock_style () begin_reversible_command (_("change meter lock style")); XMLNode &before = _session->tempo_map().get_state(); MeterSection* msp = &mm->meter(); + + const Meter meter (msp->divisions_per_bar(), msp->note_divisor()); + const Timecode::BBT_Time bbt (msp->bbt()); + const framepos_t frame = msp->frame(); const PositionLockStyle pls = (msp->position_lock_style() == AudioTime) ? MusicTime : AudioTime; - _session->tempo_map().replace_meter (*msp, Meter (msp->divisions_per_bar(), msp->note_divisor()), msp->bbt(), msp->frame(), pls); + _session->tempo_map().replace_meter (*msp, meter, bbt, frame, pls); XMLNode &after = _session->tempo_map().get_state(); _session->add_command(new MementoCommand<TempoMap>(_session->tempo_map(), &before, &after)); commit_reversible_command (); } else if (tm) { - begin_reversible_command (_("change tempo lock style")); - XMLNode &before = _session->tempo_map().get_state(); TempoSection* tsp = &tm->tempo(); + + const Tempo tempo (tsp->beats_per_minute()); + const double pulse = tsp->pulse(); + const framepos_t frame = tsp->frame(); + const TempoSection::Type type = tsp->type(); const PositionLockStyle pls = (tsp->position_lock_style() == AudioTime) ? MusicTime : AudioTime; - _session->tempo_map().replace_tempo (*tsp, Tempo (tsp->beats_per_minute(), tsp->note_type()), tsp->pulse(), tsp->frame(), tsp->type(), pls); + begin_reversible_command (_("change tempo lock style")); + XMLNode &before = _session->tempo_map().get_state(); + + _session->tempo_map().replace_tempo (*tsp, tempo, pulse, frame, type, pls); XMLNode &after = _session->tempo_map().get_state(); _session->add_command(new MementoCommand<TempoMap>(_session->tempo_map(), &before, &after)); @@ -1420,12 +1430,18 @@ Editor::toggle_tempo_type () dynamic_cast_marker_object (marker_menu_item->get_data ("marker"), &mm, &tm); if (tm) { - begin_reversible_command (_("change tempo type")); - XMLNode &before = _session->tempo_map().get_state(); TempoSection* tsp = &tm->tempo(); + + const Tempo tempo (tsp->beats_per_minute(), tsp->note_type()); + const double pulse = tsp->pulse(); + const framepos_t frame = tsp->frame(); const TempoSection::Type type = (tsp->type() == TempoSection::Ramp) ? TempoSection::Constant : TempoSection::Ramp; - _session->tempo_map().replace_tempo (*tsp, Tempo (tsp->beats_per_minute(), tsp->note_type()), tsp->pulse(), tsp->frame() - , type, tsp->position_lock_style()); + const PositionLockStyle pls = tsp->position_lock_style(); + + begin_reversible_command (_("change tempo type")); + XMLNode &before = _session->tempo_map().get_state(); + + _session->tempo_map().replace_tempo (*tsp, tempo, pulse, frame, type, pls); XMLNode &after = _session->tempo_map().get_state(); _session->add_command(new MementoCommand<TempoMap>(_session->tempo_map(), &before, &after)); |