diff --git a/src/Menus.cpp b/src/Menus.cpp index 0eb2abbc4..5be6175bf 100644 --- a/src/Menus.cpp +++ b/src/Menus.cpp @@ -2012,6 +2012,8 @@ void AudacityProject::OnSortName() wxArrayPtrVoid arr; TrackListIterator iter(mTracks); Track *track = iter.First(); + //Assumes that linked channels have the same name. + //if this is not true a crash will occur during redraw after the sort. while (track) { for (ndx = 0; ndx < (int)arr.GetCount(); ndx++) { if (track->GetName() < ((Track *) arr[ndx])->GetName()) { diff --git a/src/Project.cpp b/src/Project.cpp index 122833cf3..e0ef3e48d 100644 --- a/src/Project.cpp +++ b/src/Project.cpp @@ -3269,14 +3269,17 @@ void AudacityProject::AddImportedTracks(wxString fileName, bool initiallyEmpty = mTracks->IsEmpty(); double newRate = 0; wxString trackNameBase = fileName.AfterLast(wxFILE_SEP_PATH).BeforeLast('.'); - + bool isLinked = false; for (int i = 0; i < numTracks; i++) { if (newRate == 0 && newTracks[i]->GetKind() == Track::Wave) { newRate = ((WaveTrack *)newTracks[i])->GetRate(); } mTracks->Add(newTracks[i]); newTracks[i]->SetSelected(true); - if (numTracks > 2 || (numTracks > 1 && !newTracks[i]->GetLink())) { + //we need to check link status based on the first channel only. + if(0==i) + isLinked = newTracks[i]->GetLinked(); + if (numTracks > 2 || (numTracks > 1 && !isLinked) ) { newTracks[i]->SetName(trackNameBase + wxString::Format(wxT(" %d" ), i + 1)); } else { diff --git a/src/TrackPanel.cpp b/src/TrackPanel.cpp index 6b7391c2f..5333a4e97 100644 --- a/src/TrackPanel.cpp +++ b/src/TrackPanel.cpp @@ -6793,9 +6793,14 @@ void TrackPanel::OnSetName(wxCommandEvent &event) wxString defaultStr = t->GetName(); wxString newName = wxGetTextFromUser(_("Change track name to:"), _("Track Name"), defaultStr); - if (newName != wxT("")) + //if we have a linked channel this name should change as well (otherwise sort by name and time will crash) + if (newName != wxT("")) { t->SetName(newName); - + if(t->GetLinked()) + { + t->GetLink()->SetName(newName); + } + } #ifdef EXPERIMENTAL_MIXER_BOARD MixerBoard* pMixerBoard = this->GetMixerBoard(); if (pMixerBoard && (t->GetKind() == Track::Wave))