From 27315ac6319f8982214d3133a8be64cbe92bab63 Mon Sep 17 00:00:00 2001
From: David Sansome <davidsansome@gmail.com>
Date: Thu, 14 Jan 2010 14:38:27 +0000
Subject: [PATCH] Delete on playlist selects next item

---
 TODO                 |  1 -
 src/playlistview.cpp | 22 ++++++++++++++++++++--
 src/playlistview.h   |  3 +++
 3 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/TODO b/TODO
index b359af468..2e38e8384 100644
--- a/TODO
+++ b/TODO
@@ -7,7 +7,6 @@
 - Global shortcut keys
 - Make QSortFilterProxyModel on the library obey hasChildren()
 - Database versioning
-- Delete on playlist focuses next item
 - Enter on playlist plays
 - Clicking play plays selected item
 - More actions in playlist context menu
diff --git a/src/playlistview.cpp b/src/playlistview.cpp
index 820339333..73bb1f8c3 100644
--- a/src/playlistview.cpp
+++ b/src/playlistview.cpp
@@ -298,8 +298,13 @@ bool CompareSelectionRanges(const QItemSelectionRange& a, const QItemSelectionRa
 }
 
 void PlaylistView::keyPressEvent(QKeyEvent* event) {
-  if (model() && (event->matches(QKeySequence::Delete) ||
-                  event->key() == Qt::Key_Backspace)) {
+  if (!model()) {
+    QTreeView::keyPressEvent(event);
+    return;
+  }
+
+  if (event->matches(QKeySequence::Delete) ||
+      event->key() == Qt::Key_Backspace) {
     QItemSelection selection(selectionModel()->selection());
 
     // Sort the selection so we remove the items at the *bottom* first, ensuring
@@ -310,6 +315,19 @@ void PlaylistView::keyPressEvent(QKeyEvent* event) {
       model()->removeRows(range.top(), range.height(), range.parent());
     }
 
+    // Select the new current item
+    if (currentIndex().isValid())
+      selectionModel()->select(
+          QItemSelection(currentIndex().sibling(currentIndex().row(), 0),
+                         currentIndex().sibling(currentIndex().row(), model()->columnCount()-1)),
+          QItemSelectionModel::Select);
+
+    event->accept();
+  } else if (event->key() == Qt::Key_Enter ||
+             event->key() == Qt::Key_Return ||
+             event->key() == Qt::Key_Space) {
+    if (currentIndex().isValid())
+      emit PlayPauseItem(currentIndex());
     event->accept();
   } else {
     QTreeView::keyPressEvent(event);
diff --git a/src/playlistview.h b/src/playlistview.h
index 107166975..18bebf14e 100644
--- a/src/playlistview.h
+++ b/src/playlistview.h
@@ -55,6 +55,9 @@ class PlaylistView : public QTreeView {
   void StartRadioLoading();
   void StopRadioLoading();
 
+ signals:
+  void PlayPauseItem(const QModelIndex& index);
+
  protected:
   void hideEvent(QHideEvent* event);
   void showEvent(QShowEvent* event);