From: Peter Penz Date: Thu, 8 Sep 2011 19:16:14 +0000 (+0200) Subject: KFileItemModel: emit itemsChanged() signal X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/b60cbf2d1d474a2b000ade365b90e630b2d210c5 KFileItemModel: emit itemsChanged() signal --- diff --git a/src/kitemviews/kfileitemmodel.cpp b/src/kitemviews/kfileitemmodel.cpp index 9de99d8de..ff0c4a02d 100644 --- a/src/kitemviews/kfileitemmodel.cpp +++ b/src/kitemviews/kfileitemmodel.cpp @@ -57,6 +57,7 @@ KFileItemModel::KFileItemModel(KDirLister* dirLister, QObject* parent) : connect(dirLister, SIGNAL(completed()), this, SLOT(slotCompleted())); connect(dirLister, SIGNAL(newItems(KFileItemList)), this, SLOT(slotNewItems(KFileItemList))); connect(dirLister, SIGNAL(itemsDeleted(KFileItemList)), this, SLOT(slotItemsDeleted(KFileItemList))); + connect(dirLister, SIGNAL(refreshItems(QList >)), this, SLOT(slotRefreshItems(QList >))); connect(dirLister, SIGNAL(clear()), this, SLOT(slotClear())); connect(dirLister, SIGNAL(clear(KUrl)), this, SLOT(slotClear(KUrl))); @@ -417,6 +418,55 @@ void KFileItemModel::slotItemsDeleted(const KFileItemList& items) removeItems(items); } +void KFileItemModel::slotRefreshItems(const QList >& items) +{ + Q_ASSERT(!items.isEmpty()); +#ifdef KFILEITEMMODEL_DEBUG + kDebug() << "Refreshing" << items.count() << "items"; +#endif + + // Get the indexes of all items that have been refreshed + QList indexes; + indexes.reserve(items.count()); + + QListIterator > it(items); + while (it.hasNext()) { + const QPair& itemPair = it.next(); + const int index = m_items.value(itemPair.second.url(), -1); + if (index >= 0) { + indexes.append(index); + } + } + + // Extract the item-ranges out of the changed indexes + qSort(indexes); + + KItemRangeList itemRangeList; + int rangeIndex = 0; + int rangeCount = 1; + int previousIndex = indexes.at(0); + + const int maxIndex = indexes.count() - 1; + for (int i = 1; i <= maxIndex; ++i) { + const int currentIndex = indexes.at(i); + if (currentIndex == previousIndex + 1) { + ++rangeCount; + } else { + itemRangeList.append(KItemRange(rangeIndex, rangeCount)); + + rangeIndex = currentIndex; + rangeCount = 1; + } + previousIndex = currentIndex; + } + + if (rangeCount > 0) { + itemRangeList.append(KItemRange(rangeIndex, rangeCount)); + } + + emit itemsChanged(itemRangeList, QSet()); +} + void KFileItemModel::slotClear() { #ifdef KFILEITEMMODEL_DEBUG diff --git a/src/kitemviews/kfileitemmodel.h b/src/kitemviews/kfileitemmodel.h index 1b7c8bdca..5d75329d1 100644 --- a/src/kitemviews/kfileitemmodel.h +++ b/src/kitemviews/kfileitemmodel.h @@ -123,6 +123,7 @@ private slots: void slotCanceled(); void slotNewItems(const KFileItemList& items); void slotItemsDeleted(const KFileItemList& items); + void slotRefreshItems(const QList >& items); void slotClear(); void slotClear(const KUrl& url); diff --git a/src/views/versioncontrol/versioncontrolobserver.cpp b/src/views/versioncontrol/versioncontrolobserver.cpp index 14f5e0bc9..b454607c1 100644 --- a/src/views/versioncontrol/versioncontrolobserver.cpp +++ b/src/views/versioncontrol/versioncontrolobserver.cpp @@ -85,6 +85,8 @@ void VersionControlObserver::setModel(KFileItemModel* model) if (m_model) { disconnect(m_model, SIGNAL(itemsInserted(KItemRangeList)), this, SLOT(delayedDirectoryVerification())); + disconnect(m_model, SIGNAL(itemsChanged(KItemRangeList,QSet)), + this, SLOT(delayedDirectoryVerification())); } m_model = model; @@ -92,6 +94,8 @@ void VersionControlObserver::setModel(KFileItemModel* model) if (model) { connect(m_model, SIGNAL(itemsInserted(KItemRangeList)), this, SLOT(delayedDirectoryVerification())); + connect(m_model, SIGNAL(itemsChanged(KItemRangeList,QSet)), + this, SLOT(delayedDirectoryVerification())); } }