From ea2ed61cd12eec48b66811df0e43dd40e546374a Mon Sep 17 00:00:00 2001 From: Peter Penz Date: Fri, 16 Dec 2011 22:01:04 +0100 Subject: Update the roles if items have been changed The code "// TODO..." in slotItemsChanged() obviously was not sufficient ;-) BUG: 288691 BUG: 288824 BUG: 288921 FIXED-IN: 4.8.0 --- src/kitemviews/kfileitemmodelrolesupdater.cpp | 80 ++++++++++++++------------- 1 file changed, 42 insertions(+), 38 deletions(-) (limited to 'src/kitemviews/kfileitemmodelrolesupdater.cpp') diff --git a/src/kitemviews/kfileitemmodelrolesupdater.cpp b/src/kitemviews/kfileitemmodelrolesupdater.cpp index 65c11e0f5..5175b371c 100644 --- a/src/kitemviews/kfileitemmodelrolesupdater.cpp +++ b/src/kitemviews/kfileitemmodelrolesupdater.cpp @@ -243,42 +243,7 @@ QStringList KFileItemModelRolesUpdater::enabledPlugins() const void KFileItemModelRolesUpdater::slotItemsInserted(const KItemRangeList& itemRanges) { - // If no valid index range is given assume that all items are visible. - // A cleanup will be done later as soon as the index range has been set. - const bool hasValidIndexRange = (m_lastVisibleIndex >= 0); - - if (hasValidIndexRange) { - // Move all current pending visible items that are not visible anymore - // to the pending invisible items. - QSetIterator it(m_pendingVisibleItems); - while (it.hasNext()) { - const KFileItem item = it.next(); - const int index = m_model->index(item); - if (index < m_firstVisibleIndex || index > m_lastVisibleIndex) { - m_pendingVisibleItems.remove(item); - m_pendingInvisibleItems.insert(item); - } - } - } - - int rangesCount = 0; - - foreach (const KItemRange& range, itemRanges) { - rangesCount += range.count; - - // Add the inserted items to the pending visible and invisible items - const int lastIndex = range.index + range.count - 1; - for (int i = range.index; i <= lastIndex; ++i) { - const KFileItem item = m_model->fileItem(i); - if (!hasValidIndexRange || (i >= m_firstVisibleIndex && i <= m_lastVisibleIndex)) { - m_pendingVisibleItems.insert(item); - } else { - m_pendingInvisibleItems.insert(item); - } - } - } - - triggerPendingRolesResolving(rangesCount); + startUpdating(itemRanges); } void KFileItemModelRolesUpdater::slotItemsRemoved(const KItemRangeList& itemRanges) @@ -313,9 +278,8 @@ void KFileItemModelRolesUpdater::slotItemsRemoved(const KItemRangeList& itemRang void KFileItemModelRolesUpdater::slotItemsChanged(const KItemRangeList& itemRanges, const QSet& roles) { - Q_UNUSED(itemRanges); Q_UNUSED(roles); - // TODO + startUpdating(itemRanges); } void KFileItemModelRolesUpdater::slotGotPreview(const KFileItem& item, const QPixmap& pixmap) @@ -494,6 +458,46 @@ void KFileItemModelRolesUpdater::resolveNextPendingRoles() #endif } +void KFileItemModelRolesUpdater::startUpdating(const KItemRangeList& itemRanges) +{ + // If no valid index range is given assume that all items are visible. + // A cleanup will be done later as soon as the index range has been set. + const bool hasValidIndexRange = (m_lastVisibleIndex >= 0); + + if (hasValidIndexRange) { + // Move all current pending visible items that are not visible anymore + // to the pending invisible items. + QSetIterator it(m_pendingVisibleItems); + while (it.hasNext()) { + const KFileItem item = it.next(); + const int index = m_model->index(item); + if (index < m_firstVisibleIndex || index > m_lastVisibleIndex) { + m_pendingVisibleItems.remove(item); + m_pendingInvisibleItems.insert(item); + } + } + } + + int rangesCount = 0; + + foreach (const KItemRange& range, itemRanges) { + rangesCount += range.count; + + // Add the inserted items to the pending visible and invisible items + const int lastIndex = range.index + range.count - 1; + for (int i = range.index; i <= lastIndex; ++i) { + const KFileItem item = m_model->fileItem(i); + if (!hasValidIndexRange || (i >= m_firstVisibleIndex && i <= m_lastVisibleIndex)) { + m_pendingVisibleItems.insert(item); + } else { + m_pendingInvisibleItems.insert(item); + } + } + } + + triggerPendingRolesResolving(rangesCount); +} + void KFileItemModelRolesUpdater::startPreviewJob(const KFileItemList& items) { if (items.isEmpty() || m_paused) { -- cgit v1.3