Clean up _before XMLNode in AutomationList if no automation write occurred.
This commit is contained in:
parent
2d47196f43
commit
7ade596c92
@ -107,7 +107,7 @@ public:
|
||||
const ParameterDescriptor& desc() const { return _desc; }
|
||||
|
||||
const ARDOUR::Session& session() const { return _session; }
|
||||
void commit_transaction ();
|
||||
void commit_transaction (bool did_write);
|
||||
|
||||
protected:
|
||||
|
||||
|
@ -114,6 +114,7 @@ class LIBARDOUR_API AutomationList : public PBD::StatefulDestructible, public Ev
|
||||
bool operator!= (const AutomationList &) const;
|
||||
|
||||
XMLNode* before () { return _before; }
|
||||
void clear_history ();
|
||||
private:
|
||||
void create_curve_if_necessary ();
|
||||
int deserialize_events (const XMLNode&);
|
||||
|
@ -398,9 +398,7 @@ Automatable::transport_stopped (framepos_t now)
|
||||
|
||||
l->stop_touch (true, now);
|
||||
|
||||
if (list_did_write) {
|
||||
c->commit_transaction ();
|
||||
}
|
||||
c->commit_transaction (list_did_write);
|
||||
|
||||
l->write_pass_finished (now, Config->get_automation_thinning_factor ());
|
||||
|
||||
|
@ -163,11 +163,15 @@ AutomationControl::stop_touch(bool mark, double when)
|
||||
}
|
||||
|
||||
void
|
||||
AutomationControl::commit_transaction ()
|
||||
AutomationControl::commit_transaction (bool did_write)
|
||||
{
|
||||
if (alist ()->before ()) {
|
||||
_session.begin_reversible_command (string_compose (_("record %1 automation"), name ()));
|
||||
_session.commit_reversible_command (new MementoCommand<AutomationList> (*alist ().get (), alist ()->before (), &alist ()->get_state ()));
|
||||
if (did_write) {
|
||||
if (alist ()->before ()) {
|
||||
_session.begin_reversible_command (string_compose (_("record %1 automation"), name ()));
|
||||
_session.commit_reversible_command (new MementoCommand<AutomationList> (*alist ().get (), alist ()->before (), &alist ()->get_state ()));
|
||||
}
|
||||
} else {
|
||||
alist ()->clear_history ();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -191,9 +191,6 @@ AutomationList::set_automation_state (AutoState s)
|
||||
{
|
||||
if (s != _state) {
|
||||
_state = s;
|
||||
if (s == Write) {
|
||||
_before = &get_state ();
|
||||
}
|
||||
automation_state_changed (s); /* EMIT SIGNAL */
|
||||
}
|
||||
}
|
||||
@ -220,6 +217,7 @@ void
|
||||
AutomationList::write_pass_finished (double when, double thinning_factor)
|
||||
{
|
||||
ControlList::write_pass_finished (when, thinning_factor);
|
||||
/* automation control has deleted this or it is now owned by the session undo stack */
|
||||
_before = 0;
|
||||
}
|
||||
|
||||
@ -256,6 +254,16 @@ AutomationList::stop_touch (bool mark, double)
|
||||
}
|
||||
}
|
||||
|
||||
/* _before may be owned by the undo stack,
|
||||
* so we have to be careful about doing this.
|
||||
*/
|
||||
void
|
||||
AutomationList::clear_history ()
|
||||
{
|
||||
delete _before;
|
||||
_before = 0;
|
||||
}
|
||||
|
||||
void
|
||||
AutomationList::thaw ()
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user