Fix SourceListBase::remove_source
* It was never called because SourceListBase::set_session subscribed to the signal just before SessionHandle::set_session dropped _session_connections * remove_source() only checked the first source of the whole-file region, not all sources of a multi-channel region. Stereo regions with mono sources are now properly cleaned up.
This commit is contained in:
parent
5dd35ff86a
commit
3c17721eff
|
@ -33,10 +33,10 @@ SourceListBase::SourceListBase ()
|
||||||
void
|
void
|
||||||
SourceListBase::set_session (ARDOUR::Session* s)
|
SourceListBase::set_session (ARDOUR::Session* s)
|
||||||
{
|
{
|
||||||
|
RegionListBase::set_session (s);
|
||||||
if (s) {
|
if (s) {
|
||||||
s->SourceRemoved.connect (_session_connections, MISSING_INVALIDATOR, boost::bind (&SourceListBase::remove_weak_source, this, _1), gui_context ());
|
s->SourceRemoved.connect (_session_connections, MISSING_INVALIDATOR, boost::bind (&SourceListBase::remove_weak_source, this, _1), gui_context ());
|
||||||
}
|
}
|
||||||
RegionListBase::set_session (s);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -53,14 +53,15 @@ SourceListBase::remove_source (std::shared_ptr<ARDOUR::Source> source)
|
||||||
{
|
{
|
||||||
TreeModel::iterator i;
|
TreeModel::iterator i;
|
||||||
TreeModel::Children rows = _model->children ();
|
TreeModel::Children rows = _model->children ();
|
||||||
for (i = rows.begin (); i != rows.end (); ++i) {
|
for (i = rows.begin (); i != rows.end ();) {
|
||||||
std::shared_ptr<ARDOUR::Region> rr = (*i)[_columns.region];
|
std::shared_ptr<ARDOUR::Region> rr = (*i)[_columns.region];
|
||||||
if (rr->source () == source) {
|
if (rr->uses_source (source)) {
|
||||||
RegionRowMap::iterator map_it = region_row_map.find (rr);
|
RegionRowMap::iterator map_it = region_row_map.find (rr);
|
||||||
assert (map_it != region_row_map.end () && i == map_it->second);
|
assert (map_it != region_row_map.end () && i == map_it->second);
|
||||||
region_row_map.erase (map_it);
|
region_row_map.erase (map_it);
|
||||||
_model->erase (i);
|
i = _model->erase (i);
|
||||||
break;
|
} else {
|
||||||
|
++i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue