diff --git a/src/playlist/playlistcontainer.cpp b/src/playlist/playlistcontainer.cpp index 22b011ca7..3d47243dc 100644 --- a/src/playlist/playlistcontainer.cpp +++ b/src/playlist/playlistcontainer.cpp @@ -164,6 +164,7 @@ void PlaylistContainer::SetViewModel(Playlist* playlist) { connect(view()->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(SelectionChanged())); + emit ViewSelectionModelChanged(); // Update filter filter_->setText(playlist->proxy()->filterRegExp().pattern()); diff --git a/src/playlist/playlistcontainer.h b/src/playlist/playlistcontainer.h index 6b39609e5..b6370abfc 100644 --- a/src/playlist/playlistcontainer.h +++ b/src/playlist/playlistcontainer.h @@ -52,6 +52,7 @@ signals: void Remove(int id); void UndoRedoActionsChanged(QAction* undo, QAction* redo); + void ViewSelectionModelChanged(); protected: // QWidget diff --git a/src/ui/mainwindow.cpp b/src/ui/mainwindow.cpp index b66cfbaf3..6456cd679 100644 --- a/src/ui/mainwindow.cpp +++ b/src/ui/mainwindow.cpp @@ -217,6 +217,7 @@ MainWindow::MainWindow(Engine::Type engine, QWidget *parent) library_sort_model_->setDynamicSortFilter(true); library_sort_model_->sort(0); + connect(ui_->playlist, SIGNAL(ViewSelectionModelChanged()), SLOT(PlaylistViewSelectionModelChanged())); ui_->playlist->SetManager(playlists_); library_view_->view()->setModel(library_sort_model_); @@ -1665,3 +1666,19 @@ void MainWindow::ConnectInfoView(SongInfoBase* view) { void MainWindow::ShowSongInfoConfig() { OpenSettingsDialogAtPage(SettingsDialog::Page_SongInformation); } + +void MainWindow::PlaylistViewSelectionModelChanged() { + connect(ui_->playlist->view()->selectionModel(), + SIGNAL(currentChanged(QModelIndex,QModelIndex)), + SLOT(PlaylistCurrentChanged(QModelIndex))); +} + +void MainWindow::PlaylistCurrentChanged(const QModelIndex& proxy_current) { + const QModelIndex source_current = + playlists_->current()->proxy()->mapToSource(proxy_current); + + // If the user moves the current index using the keyboard and then presses + // F2, we don't want that editing the last column that was right clicked on. + if (source_current != playlist_menu_index_) + playlist_menu_index_ = QModelIndex(); +} diff --git a/src/ui/mainwindow.h b/src/ui/mainwindow.h index 07c8de2b3..64a41c919 100644 --- a/src/ui/mainwindow.h +++ b/src/ui/mainwindow.h @@ -109,6 +109,8 @@ class MainWindow : public QMainWindow, public PlatformInterface { void ForceShowOSD(const Song& song); void PlaylistRightClick(const QPoint& global_pos, const QModelIndex& index); + void PlaylistCurrentChanged(const QModelIndex& current); + void PlaylistViewSelectionModelChanged(); void PlaylistPlay(); void PlaylistStopAfter(); void PlaylistQueue();