add new regions created by split to selection after operation is complete

This commit is contained in:
Paul Davis 2014-07-03 19:43:28 -04:00
parent 555a5d6348
commit ba8898bd5f

View File

@ -133,7 +133,8 @@ Editor::split_regions_at (framepos_t where, RegionSelection& regions)
{ {
bool frozen = false; bool frozen = false;
list <boost::shared_ptr<Playlist > > used_playlists; list<boost::shared_ptr<Playlist> > used_playlists;
list<RouteTimeAxisView*> used_trackviews;
if (regions.empty()) { if (regions.empty()) {
return; return;
@ -188,9 +189,16 @@ Editor::split_regions_at (framepos_t where, RegionSelection& regions)
/* remember used playlists so we can thaw them later */ /* remember used playlists so we can thaw them later */
used_playlists.push_back(pl); used_playlists.push_back(pl);
TimeAxisView& tv = (*a)->get_time_axis_view();
RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (&tv);
if (rtv) {
used_trackviews.push_back (rtv);
}
pl->freeze(); pl->freeze();
} }
if (pl) { if (pl) {
pl->clear_changes (); pl->clear_changes ();
pl->split_region ((*a)->region(), where); pl->split_region ((*a)->region(), where);
@ -200,17 +208,34 @@ Editor::split_regions_at (framepos_t where, RegionSelection& regions)
a = tmp; a = tmp;
} }
vector<sigc::connection> region_added_connections;
for (list<RouteTimeAxisView*>::iterator i = used_trackviews.begin(); i != used_trackviews.end(); ++i) {
region_added_connections.push_back ((*i)->view()->RegionViewAdded.connect (sigc::mem_fun(*this, &Editor::collect_new_region_view)));
}
latest_regionviews.clear ();
while (used_playlists.size() > 0) { while (used_playlists.size() > 0) {
list <boost::shared_ptr<Playlist > >::iterator i = used_playlists.begin(); list <boost::shared_ptr<Playlist > >::iterator i = used_playlists.begin();
(*i)->thaw(); (*i)->thaw();
used_playlists.pop_front(); used_playlists.pop_front();
} }
for (vector<sigc::connection>::iterator c = region_added_connections.begin(); c != region_added_connections.end(); ++c) {
(*c).disconnect ();
}
commit_reversible_command (); commit_reversible_command ();
if (frozen){ if (frozen){
EditorThaw(); /* Emit Signal */ EditorThaw(); /* Emit Signal */
} }
if (!latest_regionviews.empty()) {
selection->add (latest_regionviews);
}
} }
/** Move one extreme of the current range selection. If more than one range is selected, /** Move one extreme of the current range selection. If more than one range is selected,