diff --git a/libs/ardour/automation_control.cc b/libs/ardour/automation_control.cc index f2361c2b30..bfb1046849 100644 --- a/libs/ardour/automation_control.cc +++ b/libs/ardour/automation_control.cc @@ -88,6 +88,8 @@ AutomationControl::set_automation_state (AutoState as) } if (as == Write) { + /* get state for undo */ + _before = &alist ()->get_state (); AutomationWatch::instance().add_automation_watch (shared_from_this()); } else if (as == Touch) { if (!touching()) { @@ -122,10 +124,6 @@ AutomationControl::start_touch(double when) if (!touching()) { - if (alist()->automation_state() == Write) { - _before = &alist ()->get_state (); - } - if (alist()->automation_state() == Touch) { /* subtle. aligns the user value with the playback */ set_value (get_value ()); diff --git a/libs/ardour/automation_list.cc b/libs/ardour/automation_list.cc index 7f7599f8ca..706a3330a7 100644 --- a/libs/ardour/automation_list.cc +++ b/libs/ardour/automation_list.cc @@ -276,7 +276,11 @@ AutomationList::state (bool full) if (_state != Write) { root->add_property ("state", auto_state_to_string (_state)); } else { - root->add_property ("state", auto_state_to_string (Off)); + if (_events.empty ()) { + root->add_property ("state", auto_state_to_string (Off)); + } else { + root->add_property ("state", auto_state_to_string (Touch)); + } } } else { /* never save anything but Off for automation state to a template */