diff --git a/src/ncmpcpp.cpp b/src/ncmpcpp.cpp index a217afd4..2be71ee4 100644 --- a/src/ncmpcpp.cpp +++ b/src/ncmpcpp.cpp @@ -452,6 +452,7 @@ int main(int argc, char *argv[]) Mpd->QueueDeleteSongId((*myPlaylist->Main())[*it].GetID()); myPlaylist->Main()->DeleteOption(*it); } + myPlaylist->FixPositions(list.front()); ShowMessage("Selected items deleted!"); } else @@ -470,6 +471,7 @@ int main(int argc, char *argv[]) myPlaylist->Main()->Refresh(); myPlaylist->Main()->ReadKey(input); } + myPlaylist->FixPositions(myPlaylist->Main()->Choice()); myPlaylist->Main()->SetTimeout(ncmpcpp_window_timeout); Playlist::BlockNowPlayingUpdate = 0; } @@ -634,6 +636,8 @@ int main(int argc, char *argv[]) for (vector::iterator it = list.begin(); it != list.end(); it++) { (*it)--; + myPlaylist->Main()->at((*it)+1).SetPosition(*it); + myPlaylist->Main()->at(*it).SetPosition((*it)+1); myPlaylist->Main()->Swap(*it, (*it)+1); } myPlaylist->Main()->Highlight(list[(list.size()-1)/2]); @@ -656,6 +660,8 @@ int main(int argc, char *argv[]) TraceMpdStatus(); time(&timer); to--; + myPlaylist->Main()->at(from).SetPosition(to); + myPlaylist->Main()->at(to).SetPosition(from); myPlaylist->Main()->Swap(to, to+1); myPlaylist->Main()->Scroll(wUp); myPlaylist->Main()->Refresh(); @@ -743,6 +749,8 @@ int main(int argc, char *argv[]) for (vector::reverse_iterator it = list.rbegin(); it != list.rend(); it++) { (*it)++; + myPlaylist->Main()->at((*it)-1).SetPosition(*it); + myPlaylist->Main()->at(*it).SetPosition((*it)-1); myPlaylist->Main()->Swap(*it, (*it)-1); } myPlaylist->Main()->Highlight(list[(list.size()-1)/2]); @@ -765,6 +773,8 @@ int main(int argc, char *argv[]) TraceMpdStatus(); time(&timer); to++; + myPlaylist->Main()->at(from).SetPosition(to); + myPlaylist->Main()->at(to).SetPosition(from); myPlaylist->Main()->Swap(to, to-1); myPlaylist->Main()->Scroll(wDown); myPlaylist->Main()->Refresh(); diff --git a/src/playlist.cpp b/src/playlist.cpp index 68657dca..4c84e040 100644 --- a/src/playlist.cpp +++ b/src/playlist.cpp @@ -255,6 +255,18 @@ void Playlist::Sort() ShowMessage("Playlist sorted!"); } +void Playlist::FixPositions(size_t beginning) +{ + bool was_filtered = w->isFiltered(); + w->ShowAll(); + for (size_t i = beginning; i < w->Size(); i++) + { + (*w)[i].SetPosition(i); + } + if (was_filtered) + w->ShowFiltered(); +} + bool Playlist::Sorting(MPD::Song *a, MPD::Song *b) { for (size_t i = 0; i < SortOptions; i++) diff --git a/src/playlist.h b/src/playlist.h index 7cadfe54..9f2d0132 100644 --- a/src/playlist.h +++ b/src/playlist.h @@ -56,6 +56,7 @@ class Playlist : public Screen< Menu > const MPD::Song *NowPlayingSong(); void Sort(); + void FixPositions(size_t = 0); static std::string SongToString(const MPD::Song &, void *); static std::string SongInColumnsToString(const MPD::Song &, void *);