diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp index 1f93a6357e..1c35072e52 100644 --- a/src/kitemviews/kitemlistcontroller.cpp +++ b/src/kitemviews/kitemlistcontroller.cpp @@ -60,6 +60,8 @@ KItemListController::KItemListController(KItemModelBase* model, KItemListView* v { connect(m_keyboardManager, SIGNAL(changeCurrentItem(QString,bool)), this, SLOT(slotChangeCurrentItem(QString,bool))); + connect(m_selectionManager, SIGNAL(currentChanged(int,int)), + m_keyboardManager, SLOT(slotCurrentChanged(int,int))); m_autoActivationTimer = new QTimer(this); m_autoActivationTimer->setSingleShot(true); diff --git a/src/kitemviews/kitemlistselectionmanager.cpp b/src/kitemviews/kitemlistselectionmanager.cpp index 79c3370b47..383914df01 100644 --- a/src/kitemviews/kitemlistselectionmanager.cpp +++ b/src/kitemviews/kitemlistselectionmanager.cpp @@ -291,12 +291,15 @@ void KItemListSelectionManager::itemsRemoved(const KItemRangeList& itemRanges) // Calling setCurrentItem() would trigger the selectionChanged signal, but we want to // emit it only once in this function -> change the current item manually and emit currentChanged m_currentItem = indexAfterRangesRemoving(m_currentItem, itemRanges); - if (m_currentItem < 0) { - m_currentItem = qMin(previousCurrent, m_model->count() - 1); - } if (m_currentItem != previousCurrent) { emit currentChanged(m_currentItem, previousCurrent); } + + if (m_currentItem < 0) { + // The current item has been removed. + m_currentItem = qMin(previousCurrent, m_model->count() - 1); + emit currentChanged(m_currentItem, -1); + } } // Update the anchor item diff --git a/src/kitemviews/private/kitemlistkeyboardsearchmanager.cpp b/src/kitemviews/private/kitemlistkeyboardsearchmanager.cpp index 41ca34be46..da8f72b7ee 100644 --- a/src/kitemviews/private/kitemlistkeyboardsearchmanager.cpp +++ b/src/kitemviews/private/kitemlistkeyboardsearchmanager.cpp @@ -78,3 +78,13 @@ void KItemListKeyboardSearchManager::cancelSearch() { m_searchedString.clear(); } + +void KItemListKeyboardSearchManager::slotCurrentChanged(int current, int previous) +{ + Q_UNUSED(previous); + + if (current < 0) { + // The current item has been removed. We should cancel the search. + cancelSearch(); + } +} diff --git a/src/kitemviews/private/kitemlistkeyboardsearchmanager.h b/src/kitemviews/private/kitemlistkeyboardsearchmanager.h index 3f13ff4459..3731548c96 100644 --- a/src/kitemviews/private/kitemlistkeyboardsearchmanager.h +++ b/src/kitemviews/private/kitemlistkeyboardsearchmanager.h @@ -60,6 +60,10 @@ public: void cancelSearch(); +public slots: + + void slotCurrentChanged(int current, int previous); + signals: /** * Is emitted if the current item should be changed corresponding