fix continuing SNAFUs with ::set_state() for control protocols and the parent/child...
authorPaul Davis <paul@linuxaudiosystems.com>
Sun, 6 Jan 2013 14:39:27 +0000 (14:39 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Sun, 6 Jan 2013 14:39:27 +0000 (14:39 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@13794 d708f5d6-7413-0410-9779-e7cbd77b26cf

libs/ardour/control_protocol_manager.cc
libs/surfaces/generic_midi/generic_midi_control_protocol.cc

index 64876b1d5f0316779df2781f5b5d4530c507f88c..0fd5319e40baf7f9b010f75a91195921a916a3c4 100644 (file)
@@ -72,6 +72,7 @@ ControlProtocolManager::set_session (Session* s)
 
                for (list<ControlProtocolInfo*>::iterator i = control_protocol_info.begin(); i != control_protocol_info.end(); ++i) {
                        if ((*i)->requested || (*i)->mandatory) {
+                               
                                instantiate (**i);
                                (*i)->requested = false;
 
@@ -344,12 +345,7 @@ ControlProtocolManager::set_state (const XMLNode& node, int /*version*/)
                        ControlProtocolInfo* cpi = cpi_by_name (prop->value());
                        
                        if (cpi) {
-                               
-                               if (!(*citer)->children().empty()) {
-                                       cpi->state = new XMLNode (*((*citer)->children().front ()));
-                               } else {
-                                       cpi->state = 0;
-                               }
+                               cpi->state = new XMLNode (**citer);
                                
                                if (active) {
                                        if (_session) {
index 8173217c22a7af15a4c69d2586746eaba6665215..a8ca0c7221d84c0b75e51fac6876151514ca5313 100644 (file)
@@ -544,7 +544,15 @@ GenericMidiControlProtocol::set_state (const XMLNode& node, int version)
                        return 0;
                }
 
+               nlist = nlist.front()->children(); // "MIDIControllable" ...
+
+               if (nlist.empty()) {
+                       return 0;
+               }
+
                for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
+
+                       
                        
                        if ((prop = (*niter)->property ("id")) != 0) {
 
@@ -565,7 +573,6 @@ GenericMidiControlProtocol::set_state (const XMLNode& node, int version)
                                }
                        }
                }
-
        }
 
        if ((prop = node.property ("binding")) != 0) {