diff --git a/gtk2_ardour/automation_region_view.cc b/gtk2_ardour/automation_region_view.cc index 57bb71bef6..8bdc36956a 100644 --- a/gtk2_ardour/automation_region_view.cc +++ b/gtk2_ardour/automation_region_view.cc @@ -253,8 +253,15 @@ AutomationRegionView::paste (timepos_t const & pos /* add multi-paste offset if applicable */ p += view->editor ().get_paste_offset (pos, paste_count > 0 ? 1 : 0, len); - /* convert sample-position to model's unit and position */ - timepos_t model_pos = timepos_t (source_relative_distance (timecnt_t (p, timepos_t()), slist->time_domain())); + timepos_t model_pos = pos; + + /* potentially snap */ + + view->editor().snap_to (model_pos, Temporal::RoundNearest); + + /* convert timeline position to model's (source-relative) position */ + + model_pos = timepos_t (_region->source_position().distance (model_pos)); XMLNode& before = my_list->get_state(); my_list->paste (*slist, model_pos); diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index 03b6e914fa..3b55e6b9d4 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -4584,18 +4584,6 @@ Editor::cut_copy_points (Editing::CutCopyOp op, timepos_t const & earliest_time) earliest = std::min (earliest, (*ctrl_evt)->when); } - /* Snap start time backwards, so copy/paste is snap aligned. */ - - if (earliest != timepos_t::max (earliest.time_domain())) { - if (earliest.time_domain() == Temporal::BeatTime) { - /* always just round down to beat */ - earliest = timepos_t (earliest.beats().round_down_to_beat()); - } else { - /* do actual snap */ - snap_to (earliest, Temporal::RoundDownMaybe); - } - } - for (Lists::iterator i = lists.begin(); i != lists.end(); ++i) { /* Correct this copy list so that it is relative to the earliest start time, so relative ordering between points is preserved