diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index 190e77c0b2..cf2d08c386 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -2621,7 +2621,7 @@ Editor::insert_source_list_selection (float times) begin_reversible_command (_("insert region")); playlist->clear_changes (); playlist->clear_owned_changes (); - playlist->add_region ((RegionFactory::create (region, true)), get_preferred_edit_position(), times); + playlist->add_region ((RegionFactory::create (region, true)), get_preferred_edit_position(), times, _session->config.get_layered_record_mode()); //ToDo: insert_mode ? if (Config->get_edit_mode() == Ripple) { playlist->ripple (get_preferred_edit_position(), region->length() * times, boost::shared_ptr()); /* recusive diff of rippled regions */ diff --git a/libs/ardour/playlist.cc b/libs/ardour/playlist.cc index 49d5f2c619..8e148ac91c 100644 --- a/libs/ardour/playlist.cc +++ b/libs/ardour/playlist.cc @@ -1296,6 +1296,15 @@ Playlist::paste (boost::shared_ptr other, samplepos_t position, float { times = fabs (times); + if (times==1 && _session.config.get_layered_record_mode()) { //ToDo: insert_mode? + RegionWriteLock rlock (this); + samplepos_t pos = position; + partition_internal (pos - 1, (pos + other->_get_extent ().second), true, rlock.thawlist); + for (RegionList::iterator i = rlock.thawlist.begin (); i != rlock.thawlist.end (); ++i) { + _session.add_command (new StatefulDiffCommand (*i)); + } + } + { RegionReadLock rl2 (other.get ());