diff --git a/src/menus/EditMenus.cpp b/src/menus/EditMenus.cpp index e28c1b79a..3dd92d89d 100644 --- a/src/menus/EditMenus.cpp +++ b/src/menus/EditMenus.cpp @@ -323,6 +323,8 @@ void OnDelete(const CommandContext &context) auto &window = ProjectWindow::Get( project ); for (auto n : tracks.Any()) { + if (!n->SupportsBasicEditing()) + continue; if (n->GetSelected() || n->IsSyncLockSelected()) { n->Clear(selectedRegion.t0(), selectedRegion.t1()); } @@ -647,6 +649,9 @@ void OnDuplicate(const CommandContext &context) auto range = tracks.Selected(); auto last = *range.rbegin(); for (auto n : range) { + if (!n->SupportsBasicEditing()) + continue; + // Make copies not for clipboard but for direct addition to the project auto dest = n->Copy(selectedRegion.t0(), selectedRegion.t1(), false); @@ -687,12 +692,14 @@ void OnSplitCut(const CommandContext &context) FinishCopy(n, dest, newClipboard); }, [&](Track *n) { - dest = n->Copy(selectedRegion.t0(), - selectedRegion.t1()); - n->Silence(selectedRegion.t0(), + if (n->SupportsBasicEditing()) { + dest = n->Copy(selectedRegion.t0(), selectedRegion.t1()); - if (dest) - FinishCopy(n, dest, newClipboard); + n->Silence(selectedRegion.t0(), + selectedRegion.t1()); + if (dest) + FinishCopy(n, dest, newClipboard); + } } ); @@ -717,8 +724,9 @@ void OnSplitDelete(const CommandContext &context) selectedRegion.t1()); }, [&](Track *n) { - n->Silence(selectedRegion.t0(), - selectedRegion.t1()); + if (n->SupportsBasicEditing()) + n->Silence(selectedRegion.t0(), + selectedRegion.t1()); } ); diff --git a/src/menus/SelectMenus.cpp b/src/menus/SelectMenus.cpp index c44900dcc..1a2bd0e66 100644 --- a/src/menus/SelectMenus.cpp +++ b/src/menus/SelectMenus.cpp @@ -483,7 +483,7 @@ void OnSelectSyncLockSel(const CommandContext &context) auto &tracks = TrackList::Get( project ); bool selected = false; - for (auto t : tracks.Any() + for (auto t : tracks.Any() + &Track::SupportsBasicEditing + &Track::IsSyncLockSelected - &Track::IsSelected) { t->SetSelected(true); selected = true; @@ -866,7 +866,7 @@ void OnCursorTrackStart(const CommandContext &context) double kWayOverToRight = std::numeric_limits::max(); - auto trackRange = tracks.Selected(); + auto trackRange = tracks.Selected() + &Track::SupportsBasicEditing; if (trackRange.empty()) // This should have been prevented by command manager return; @@ -892,7 +892,7 @@ void OnCursorTrackEnd(const CommandContext &context) double kWayOverToLeft = std::numeric_limits::lowest(); - auto trackRange = tracks.Selected(); + auto trackRange = tracks.Selected() + &Track::SupportsBasicEditing; if (trackRange.empty()) // This should have been prevented by command manager return;