diff options
Diffstat (limited to 'src/revisioncontrolobserver.cpp')
| -rw-r--r-- | src/revisioncontrolobserver.cpp | 44 |
1 files changed, 25 insertions, 19 deletions
diff --git a/src/revisioncontrolobserver.cpp b/src/revisioncontrolobserver.cpp index 6ecba64c5..87f0a3aa7 100644 --- a/src/revisioncontrolobserver.cpp +++ b/src/revisioncontrolobserver.cpp @@ -73,9 +73,12 @@ void UpdateItemStatesThread::run() { Q_ASSERT(!m_itemStates.isEmpty()); Q_ASSERT(m_plugin != 0); - - // it is assumed that all items have the same parent directory - const QString directory = m_itemStates.first().item.url().directory(KUrl::AppendTrailingSlash); + + // The items from m_itemStates may be located in different directory levels. The revision + // plugin requires the root directory for RevisionControlPlugin::beginRetrieval(). Instead + // of doing an expensive search, we utilize the knowledge of the implementation of + // RevisionControlObserver::addDirectory() to be sure that the last item contains the root. + const QString directory = m_itemStates.last().item.url().directory(KUrl::AppendTrailingSlash); QMutexLocker locker(m_pluginMutex); m_retrievedItems = false; @@ -293,22 +296,9 @@ void RevisionControlObserver::updateItemStates() return; } - const int rowCount = m_dolphinModel->rowCount(); - if (rowCount > 0) { - // Build a list of all items in the current directory and delegate - // this list to the thread, which adjusts the revision states. - QList<ItemState> itemStates; - for (int row = 0; row < rowCount; ++row) { - const QModelIndex index = m_dolphinModel->index(row, DolphinModel::Revision); - - ItemState itemState; - itemState.index = index; - itemState.item = m_dolphinModel->itemForIndex(index); - itemState.revision = RevisionControlPlugin::UnversionedRevision; - - itemStates.append(itemState); - } - + QList<ItemState> itemStates; + addDirectory(QModelIndex(), itemStates); + if (!itemStates.isEmpty()) { if (!m_silentUpdate) { emit infoMessage(i18nc("@info:status", "Updating revision information...")); } @@ -317,4 +307,20 @@ void RevisionControlObserver::updateItemStates() } } +void RevisionControlObserver::addDirectory(const QModelIndex& parentIndex, QList<ItemState>& itemStates) +{ + const int rowCount = m_dolphinModel->rowCount(parentIndex); + for (int row = 0; row < rowCount; ++row) { + const QModelIndex index = m_dolphinModel->index(row, DolphinModel::Revision, parentIndex); + addDirectory(index, itemStates); + + ItemState itemState; + itemState.index = index; + itemState.item = m_dolphinModel->itemForIndex(index); + itemState.revision = RevisionControlPlugin::UnversionedRevision; + + itemStates.append(itemState); + } +} + #include "revisioncontrolobserver.moc" |
