Make automation record undo per pass rather than per touch.
[ardour.git] / libs / ardour / automation_control.cc
index 26ea53cbd2d1c22fd9a71107ef471601d5f6da3b..0e2355e708947ffdabd0ba6aa87520fe39cf6c47 100644 (file)
@@ -88,8 +88,6 @@ 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()) {
@@ -127,7 +125,6 @@ AutomationControl::start_touch(double when)
                if (alist()->automation_state() == Touch) {
                        /* subtle. aligns the user value with the playback */
                        set_value (get_value ());
-                       _before = &alist ()->get_state ();
                        alist()->start_touch (when);
                        if (!_desc.toggled) {
                                AutomationWatch::instance().add_automation_watch (shared_from_this());
@@ -144,25 +141,25 @@ AutomationControl::stop_touch(bool mark, double when)
        if (touching()) {
                set_touching (false);
 
-               if (alist()->automation_state() == Write) {
-                       _session.begin_reversible_command (string_compose (_("write %1 automation"), name ()));
-                       _session.add_command (new MementoCommand<AutomationList> (*alist ().get (), _before, &alist ()->get_state ()));
-                       _session.commit_reversible_command ();
-               }
-
                if (alist()->automation_state() == Touch) {
                        alist()->stop_touch (mark, when);
                        if (!_desc.toggled) {
                                AutomationWatch::instance().remove_automation_watch (shared_from_this());
-                       }
 
-                       _session.begin_reversible_command (string_compose (_("touch %1 automation"), name ()));
-                       _session.add_command (new MementoCommand<AutomationList> (*alist ().get (), _before, &alist ()->get_state ()));
-                       _session.commit_reversible_command ();
+                       }
                }
        }
 }
 
+void
+AutomationControl::commit_transaction ()
+{
+       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 ()));
+       }
+}
+
 double
 AutomationControl::internal_to_interface (double val) const
 {