diff --git a/src/TrackPanel.cpp b/src/TrackPanel.cpp index c75aad047..623a98754 100644 --- a/src/TrackPanel.cpp +++ b/src/TrackPanel.cpp @@ -7741,10 +7741,12 @@ void TrackPanel::OnTrackMenu(Track *t) (next && isMono && !next->GetLinked() && next->GetKind() == Track::Wave); - theMenu->Enable(OnSwapChannelsID, t->GetLinked()); - theMenu->Enable(OnMergeStereoID, canMakeStereo); - theMenu->Enable(OnSplitStereoID, t->GetLinked()); - theMenu->Enable(OnSplitStereoMonoID, t->GetLinked()); + // Unsafe to change channels during real-time preview (bug 1560) + bool unsafe = EffectManager::Get().RealtimeIsActive() && IsUnsafe(); + theMenu->Enable(OnSwapChannelsID, t->GetLinked() && !unsafe); + theMenu->Enable(OnMergeStereoID, canMakeStereo && !unsafe); + theMenu->Enable(OnSplitStereoID, t->GetLinked() && !unsafe); + theMenu->Enable(OnSplitStereoMonoID, t->GetLinked() && !unsafe); // We only need to set check marks. Clearing checks causes problems on Linux (bug 851) // + Setting unchecked items to false is to get round a linux bug @@ -7786,7 +7788,7 @@ void TrackPanel::OnTrackMenu(Track *t) SetMenuCheck(*mRateMenu, IdOfRate((int) track->GetRate())); SetMenuCheck(*mFormatMenu, IdOfFormat(track->GetSampleFormat())); - bool unsafe = IsUnsafe(); + unsafe = IsUnsafe(); for (int i = OnRate8ID; i <= OnFloatID; i++) { theMenu->Enable(i, !unsafe); }