diff --git a/src/playlist/playlistmanager.cpp b/src/playlist/playlistmanager.cpp
index 684ef1cba..09711e823 100644
--- a/src/playlist/playlistmanager.cpp
+++ b/src/playlist/playlistmanager.cpp
@@ -15,7 +15,6 @@
along with Clementine. If not, see .
*/
-#include "playlist.h"
#include "playlistbackend.h"
#include "playlistcontainer.h"
#include "playlistmanager.h"
@@ -34,6 +33,7 @@
#include
#include
#include
+#include
#include
using smart_playlists::GeneratorPtr;
@@ -293,7 +293,6 @@ bool PlaylistManager::Close(int id) {
emit PlaylistClosed(id);
if (!data.p->is_favorite()) {
- // TODO: should we warn the user this action cannot be undone?
playlist_backend_->RemovePlaylist(id);
emit PlaylistDeleted(id);
}
diff --git a/src/playlist/playlistmanager.h b/src/playlist/playlistmanager.h
index b6c49a17d..d383e84a2 100644
--- a/src/playlist/playlistmanager.h
+++ b/src/playlist/playlistmanager.h
@@ -25,11 +25,11 @@
#include
#include "core/song.h"
+#include "playlist.h"
#include "smartplaylists/generator_fwd.h"
class Application;
class LibraryBackend;
-class Playlist;
class PlaylistBackend;
class PlaylistContainer;
class PlaylistParser;
@@ -162,6 +162,7 @@ public:
QItemSelection active_selection() const { return selection(active_id()); }
QString GetPlaylistName(int index) const { return playlists_[index].name; }
+ bool IsPlaylistFavorite(int index) const { return playlists_[index].p->is_favorite(); }
void Init(LibraryBackend* library_backend, PlaylistBackend* playlist_backend,
PlaylistSequence* sequence, PlaylistContainer* playlist_container);
diff --git a/src/playlist/playlisttabbar.cpp b/src/playlist/playlisttabbar.cpp
index c80dd968e..3124b9790 100644
--- a/src/playlist/playlisttabbar.cpp
+++ b/src/playlist/playlisttabbar.cpp
@@ -94,7 +94,7 @@ void PlaylistTabBar::mouseReleaseEvent(QMouseEvent* e) {
if (e->button() == Qt::MidButton) {
// Update menu index
menu_index_ = tabAt(e->pos());
- Close();
+ Close(false);
}
QTabBar::mouseReleaseEvent(e);
@@ -151,13 +151,26 @@ void PlaylistTabBar::HideEditor() {
manager_->SetCurrentPlaylist(manager_->current()->id());
}
-void PlaylistTabBar::Close() {
+void PlaylistTabBar::Close(bool ask_for_delete) {
if (menu_index_ == -1)
return;
+ const int playlist_id = tabData(menu_index_).toInt();
+
+ if (ask_for_delete && !manager_->IsPlaylistFavorite(playlist_id)) {
+ if (QMessageBox::question(this,
+ tr("Remove playlist"),
+ tr("You are about to remove a playlist which is not part of your favorite playlists: "
+ "the playlist will be deleted (this action cannot be undone). \n"
+ "Are you sure you want to continue?"),
+ QMessageBox::Yes, QMessageBox::Cancel) != QMessageBox::Yes) {
+ return;
+ }
+ }
+
// Just hide the tab from the UI - don't delete it completely (it can still
// be resurrected from the Playlists tab).
- emit Close(tabData(menu_index_).toInt());
+ emit Close(playlist_id);
// Select the nearest tab.
if (menu_index_ > 1) {
diff --git a/src/playlist/playlisttabbar.h b/src/playlist/playlisttabbar.h
index c3636fce6..4374729d7 100644
--- a/src/playlist/playlisttabbar.h
+++ b/src/playlist/playlisttabbar.h
@@ -76,7 +76,7 @@ private slots:
void Rename();
void RenameInline();
void HideEditor();
- void Close();
+ void Close(bool ask_for_delete = true);
void CloseFromTabIndex(int index);
// Used when playlist's favorite flag isn't changed from the favorite widget
// (e.g. from the playlistlistcontainer): will update the favorite widget