┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/kitemviews/kfileitemmodel.cpp50
-rw-r--r--src/kitemviews/kfileitemmodel.h1
-rw-r--r--src/views/versioncontrol/versioncontrolobserver.cpp4
3 files changed, 55 insertions, 0 deletions
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<QPair<KFileItem,KFileItem> >)), this, SLOT(slotRefreshItems(QList<QPair<KFileItem,KFileItem> >)));
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<QPair<KFileItem, KFileItem> >& 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<int> indexes;
+ indexes.reserve(items.count());
+
+ QListIterator<QPair<KFileItem, KFileItem> > it(items);
+ while (it.hasNext()) {
+ const QPair<KFileItem, KFileItem>& 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<QByteArray>());
+}
+
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<QPair<KFileItem, KFileItem> >& 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<QByteArray>)),
+ 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<QByteArray>)),
+ this, SLOT(delayedDirectoryVerification()));
}
}