Marginal cleanup.
[ardour.git] / libs / ardour / automation_list.cc
index b76fa0bb4bc6e2108b98f931de8aafa39493c4ed..54d838f6e286c87b72d3cf4e632f2ab4cb6e43f6 100644 (file)
@@ -156,7 +156,6 @@ AutomationList::operator= (const AutomationList& other)
 
                _min_yval = other._min_yval;
                _max_yval = other._max_yval;
-               _max_xval = other._max_xval;
                _default_value = other._default_value;
 
                mark_dirty ();
@@ -213,21 +212,30 @@ AutomationList::start_touch (double when)
 void
 AutomationList::stop_touch (bool mark, double when)
 {
+       if (g_atomic_int_get (&_touching) == 0) {
+               /* this touch has already been stopped (probably by Automatable::transport_stopped),
+                  so we've nothing to do.
+               */
+               return;
+       }
+
        g_atomic_int_set (&_touching, 0);
 
         if (_state == Touch) {
+
+               assert (!nascent.empty ());
+
                 Glib::Mutex::Lock lm (ControlList::_lock);
-                
+
                 if (mark) {
-                        nascent.back()->end_time = when;
-                        
+
+                       nascent.back()->end_time = when;
+
                 } else {
-                        
+
                         /* nascent info created in start touch but never used. just get rid of it.
                          */
 
-                       assert (!nascent.empty ());
-                        
                         NascentInfo* ninfo = nascent.back ();
                         nascent.erase (nascent.begin());
                         delete ninfo;
@@ -261,7 +269,7 @@ AutomationList::state (bool full)
 
        root->add_property ("automation-id", EventTypeMap::instance().to_symbol(_parameter));
 
-       root->add_property ("id", _id.to_s());
+       root->add_property ("id", id().to_s());
 
        snprintf (buf, sizeof (buf), "%.12g", _default_value);
        root->add_property ("default", buf);
@@ -269,8 +277,6 @@ AutomationList::state (bool full)
        root->add_property ("min-yval", buf);
        snprintf (buf, sizeof (buf), "%.12g", _max_yval);
        root->add_property ("max-yval", buf);
-       snprintf (buf, sizeof (buf), "%.12g", _max_xval);
-       root->add_property ("max-xval", buf);
 
        root->add_property ("interpolation-style", enum_2_string (_interpolation));
 
@@ -357,6 +363,8 @@ AutomationList::deserialize_events (const XMLNode& node)
                fast_simple_add (x, y);
        }
 
+       thin ();
+
        if (!ok) {
                clear ();
                error << _("automation list: cannot load coordinates from XML, all points ignored") << endmsg;
@@ -373,6 +381,7 @@ AutomationList::deserialize_events (const XMLNode& node)
 int
 AutomationList::set_state (const XMLNode& node, int version)
 {
+       LocaleGuard lg (X_("POSIX"));
        XMLNodeList nlist = node.children();
        XMLNode* nsos;
        XMLNodeIterator niter;
@@ -418,6 +427,8 @@ AutomationList::set_state (const XMLNode& node, int version)
                        fast_simple_add (x, y);
                }
 
+               thin ();
+
                 thaw ();
 
                return 0;
@@ -428,8 +439,7 @@ AutomationList::set_state (const XMLNode& node, int version)
                return -1;
        }
 
-       if ((prop = node.property ("id")) != 0) {
-               _id = prop->value ();
+       if (set_id (node)) {
                /* update session AL list */
                AutomationListCreated(this);
        }
@@ -479,14 +489,8 @@ AutomationList::set_state (const XMLNode& node, int version)
                _max_yval = FLT_MAX;
        }
 
-       if ((prop = node.property (X_("max-xval"))) != 0) {
-               _max_xval = atof (prop->value ().c_str());
-       } else {
-               _max_xval = 0; // means "no limit ;
-       }
-
        bool have_events = false;
-       
+
        for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
                if ((*niter)->name() == X_("events")) {
                        deserialize_events (*(*niter));