From c3bd4b44e4c172d06e8ae4822d9f467a8d272562 Mon Sep 17 00:00:00 2001 From: Frank Reininghaus Date: Wed, 25 Apr 2012 09:20:11 +0200 Subject: [PATCH] When the current item is removed, make -1 the current index temporarily This fixes two problems: 1. KItemListKeyboardSearchManger can cancel the current search when a new folder is opened (note that this action removes the current item from the view). 2. The view can underline the new current item (which is the item that used to be below the removed item). Note that this did not work before because the view did not receive a currentChanged() signal in this case and therefore did not update the "current item" status of the new current item. CCBUG: 297488 CCBUG: 298782 REVIEW: 104709 (cherry picked from commit 68ce395a192362969783615e50a8004d3029eb7e) --- src/kitemviews/kitemlistcontroller.cpp | 2 ++ src/kitemviews/kitemlistselectionmanager.cpp | 9 ++++++--- .../private/kitemlistkeyboardsearchmanager.cpp | 10 ++++++++++ .../private/kitemlistkeyboardsearchmanager.h | 4 ++++ 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp index 1f93a6357..1c35072e5 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 79c3370b4..383914df0 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 41ca34be4..da8f72b7e 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 3f13ff445..3731548c9 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 -- 2.47.3