do not needlessly keep starting touch/automation watch passes just because a command...
authorPaul Davis <paul@linuxaudiosystems.com>
Wed, 19 Feb 2014 17:53:19 +0000 (12:53 -0500)
committerPaul Davis <paul@linuxaudiosystems.com>
Wed, 19 Feb 2014 18:22:52 +0000 (13:22 -0500)
libs/ardour/automation_control.cc

index 2586a14b5841810d0891a1cbfd8a49167a7cf954..355b0176ced0fe09ad8f6933dad613c4901a8a94 100644 (file)
@@ -117,15 +117,23 @@ AutomationControl::set_automation_style (AutoStyle as)
 void
 AutomationControl::start_touch(double when)
 {
-       set_touching (true);
-       alist()->start_touch(when);
-       AutomationWatch::instance().add_automation_watch (shared_from_this());
+       if (!touching()) {
+               if (alist()->automation_state() == Touch) {
+                       alist()->start_touch (when);
+                       AutomationWatch::instance().add_automation_watch (shared_from_this());
+               }
+               set_touching (true);
+       }
 }
 
 void
 AutomationControl::stop_touch(bool mark, double when)
 {
-       set_touching (false);
-       alist()->stop_touch (mark, when);
-       AutomationWatch::instance().remove_automation_watch (shared_from_this());
+       if (touching()) {
+               set_touching (false);
+               if (alist()->automation_state() == Touch) {
+                       alist()->stop_touch (mark, when);
+                       AutomationWatch::instance().remove_automation_watch (shared_from_this());
+               }
+       }
 }