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 68ce395a19)
This commit is contained in:
Frank Reininghaus 2012-04-25 09:20:11 +02:00
parent 90baf5a897
commit c3bd4b44e4
4 changed files with 22 additions and 3 deletions

View file

@ -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);

View file

@ -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

View file

@ -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();
}
}

View file

@ -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