From 22afcbcbb6b6358b2f95c4bb7d5e9c88328e6ced Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Sun, 30 Aug 2020 22:23:38 +0200 Subject: [PATCH] Only allow playlist editing if song is editable Set proper flags in model instead of overriding edit in view. Proper fix for #524 --- src/playlist/playlist.cpp | 15 ++++++++------- src/playlist/playlistview.cpp | 5 ----- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/src/playlist/playlist.cpp b/src/playlist/playlist.cpp index 582cfe888..cd4afed98 100644 --- a/src/playlist/playlist.cpp +++ b/src/playlist/playlist.cpp @@ -645,13 +645,14 @@ void Playlist::set_current_row(const int i, const AutoScroll autoscroll, const b Qt::ItemFlags Playlist::flags(const QModelIndex &idx) const { - Qt::ItemFlags flags = Qt::ItemIsEnabled | Qt::ItemIsSelectable; - - if (column_is_editable(static_cast(idx.column()))) flags |= Qt::ItemIsEditable; - - if (idx.isValid()) return flags | Qt::ItemIsDragEnabled; - - return Qt::ItemIsDropEnabled; + if (idx.isValid()) { + Qt::ItemFlags flags = Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDragEnabled; + if (item_at(idx.row())->Metadata().IsEditable() && column_is_editable(static_cast(idx.column()))) flags |= Qt::ItemIsEditable; + return flags; + } + else { + return Qt::ItemIsDropEnabled; + } } diff --git a/src/playlist/playlistview.cpp b/src/playlist/playlistview.cpp index 8a9dadf8b..9766a7d91 100644 --- a/src/playlist/playlistview.cpp +++ b/src/playlist/playlistview.cpp @@ -704,11 +704,6 @@ QModelIndex PlaylistView::PrevEditableIndex(const QModelIndex ¤t) { bool PlaylistView::edit(const QModelIndex &idx, QAbstractItemView::EditTrigger trigger, QEvent *event) { - // Only allow playlist editing if song is editable. - if (trigger == QAbstractItemView::AllEditTriggers && !event && playlist_ && !playlist_->item_at(idx.row())->Metadata().IsEditable()) { - return false; - } - bool result = QAbstractItemView::edit(idx, trigger, event); if (result && trigger == QAbstractItemView::AllEditTriggers && !event) { playlist_->set_editing(idx.row());