From 26344b324e3a1d6f629feb66dc9bd37166a46b7d Mon Sep 17 00:00:00 2001 From: Nikolaus Gullotta Date: Thu, 6 Jun 2019 14:08:24 -0500 Subject: [PATCH] push back group state recall until after routes, so that routes who are the sole member of a group can resurrect their group for later --- libs/ardour/mixer_snapshot.cc | 59 +++++++++++++++++------------------ 1 file changed, 29 insertions(+), 30 deletions(-) diff --git a/libs/ardour/mixer_snapshot.cc b/libs/ardour/mixer_snapshot.cc index 8f5b5978a2..221208ca22 100644 --- a/libs/ardour/mixer_snapshot.cc +++ b/libs/ardour/mixer_snapshot.cc @@ -299,32 +299,6 @@ void MixerSnapshot::recall() } } - //groups - for(vector::const_iterator i = group_states.begin(); i != group_states.end(); i++) { - if(!get_recall_groups()) { - break; - } - - State state = (*i); - - RouteGroup* group = _session->route_group_by_name(state.name); - - if(!group) { - group = _session->new_route_group(state.name); - } - - // state.node.remove_property(X_("routes")); - - if(group) { - Stateful::ForceIDRegeneration fid; - - uint32_t color; - state.node.get_property(X_("rgba"), color); - - group->set_color(color); - group->set_state(state.node, Stateful::loading_state_version); - } - } //routes for(vector::const_iterator i = route_states.begin(); i != route_states.end(); i++) { @@ -348,7 +322,7 @@ void MixerSnapshot::recall() PlaylistDisposition disp = NewPlaylist; _session->remove_route(route); - route = 0; //explicitly drop reference + route = 0; //explicitly drop referenc RouteList rl = _session->new_route_from_template(1, order, node, name, disp); boost::shared_ptr route = rl.front(); @@ -363,12 +337,13 @@ void MixerSnapshot::recall() string name; group_node->get_property(X_("name"), name); RouteGroup* rg = _session->route_group_by_name(name); - if(rg) { - printf("adding %s to %s\n", route->name().c_str(), rg->name().c_str()); + if(!rg) { + //this might've been destroyed earlier + rg = _session->new_route_group(name); + } rg->add(route); } } - } // this is no longer possible due to using new_from_route_template // _session->add_command(new MementoCommand((*route), &bfr, &route->get_state())); @@ -377,7 +352,31 @@ void MixerSnapshot::recall() } } + //groups + for(vector::const_iterator i = group_states.begin(); i != group_states.end(); i++) { + if(!get_recall_groups()) { + break; + } + + State state = (*i); + + RouteGroup* group = _session->route_group_by_name(state.name); + + if(!group) { + group = _session->new_route_group(state.name); + } + + if(group) { + Stateful::ForceIDRegeneration fid; + uint32_t color; + state.node.get_property(X_("rgba"), color); + + group->set_color(color); + group->set_state(state.node, Stateful::loading_state_version); + } + } + _session->commit_reversible_command(); }