diff --git a/src/svnfrontend/maintreewidget.h b/src/svnfrontend/maintreewidget.h --- a/src/svnfrontend/maintreewidget.h +++ b/src/svnfrontend/maintreewidget.h @@ -90,7 +90,7 @@ void slotItemActivated(const QModelIndex &); void slotItemExpanded(const QModelIndex &); void slotItemsInserted(const QModelIndex &); - void slotRescanIcons(); + void slotRefreshItem(const QString &path); void _propListTimeout(); void slotCheckUpdates(); diff --git a/src/svnfrontend/maintreewidget.cpp b/src/svnfrontend/maintreewidget.cpp --- a/src/svnfrontend/maintreewidget.cpp +++ b/src/svnfrontend/maintreewidget.cpp @@ -150,7 +150,7 @@ connect(m_Data->m_Model->svnWrapper(), SIGNAL(reinitItem(SvnItem*)), this, SLOT(slotReinitItem(SvnItem*))); connect(m_Data->m_Model->svnWrapper(), SIGNAL(sigRefreshAll()), this, SLOT(refreshCurrentTree())); connect(m_Data->m_Model->svnWrapper(), SIGNAL(sigRefreshCurrent(SvnItem*)), this, SLOT(refreshCurrent(SvnItem*))); - connect(m_Data->m_Model->svnWrapper(), SIGNAL(sigRefreshIcons()), this, SLOT(slotRescanIcons())); + connect(m_Data->m_Model->svnWrapper(), SIGNAL(sigRefreshItem(QString)), this, SLOT(slotRefreshItem(QString))); connect(m_Data->m_Model->svnWrapper(), SIGNAL(sigGotourl(QUrl)), this, SLOT(_openUrl(QUrl))); connect(m_Data->m_Model->svnWrapper(), SIGNAL(sigCacheStatus(qlonglong,qlonglong)), this, SIGNAL(sigCacheStatus(qlonglong,qlonglong))); connect(m_Data->m_Model->svnWrapper(), SIGNAL(sigThreadsChanged()), this, SLOT(enableActions())); @@ -1616,7 +1616,6 @@ } m_Data->m_Model->svnWrapper()->slotResolved(which->fullName()); which->refreshStatus(true); - //slotRescanIcons(false); } void MainTreeWidget::slotTryResolve() @@ -2295,9 +2294,12 @@ m_Data->m_Model->svnWrapper()->makeUpdate(svn::Targets(what), svn::Revision::HEAD, svn::DepthUnknown); } -void MainTreeWidget::slotRescanIcons() +void MainTreeWidget::slotRefreshItem(const QString &path) { - m_Data->m_Model->refreshIndex(m_Data->m_Model->firstRootIndex()); + const QModelIndex idx = m_Data->m_Model->findIndex(path); + if (!idx.isValid()) + return; + m_Data->m_Model->emitDataChangedRow(idx); } void MainTreeWidget::checkUseNavigation(bool startup) diff --git a/src/svnfrontend/models/svnitemmodel.h b/src/svnfrontend/models/svnitemmodel.h --- a/src/svnfrontend/models/svnitemmodel.h +++ b/src/svnfrontend/models/svnitemmodel.h @@ -110,7 +110,8 @@ bool refreshCurrentTree(); bool refreshDirnode(SvnItemModelNodeDir *, bool check_empty = false, bool notrec = false); bool refreshItem(SvnItemModelNode *); - bool refreshIndex(const QModelIndex &, bool sendSignal = true); + bool refreshIndex(const QModelIndex &idx); + void emitDataChangedRow(const QModelIndex &idx); void clearNodeDir(SvnItemModelNodeDir *); diff --git a/src/svnfrontend/models/svnitemmodel.cpp b/src/svnfrontend/models/svnitemmodel.cpp --- a/src/svnfrontend/models/svnitemmodel.cpp +++ b/src/svnfrontend/models/svnitemmodel.cpp @@ -607,15 +607,20 @@ return true; } -bool SvnItemModel::refreshIndex(const QModelIndex &ind, bool sendSignal) +bool SvnItemModel::refreshIndex(const QModelIndex &idx) { - bool ret = refreshItem(m_Data->nodeForIndex(ind)); - if (sendSignal) { - emit dataChanged(ind, ind); - } + bool ret = refreshItem(m_Data->nodeForIndex(idx)); + emitDataChangedRow(idx); return ret; } +void SvnItemModel::emitDataChangedRow(const QModelIndex &idx) +{ + const auto colS(index(idx.row(), 0, idx.parent())); + const auto colE(index(idx.row(), columnCount() - 1, idx.parent())); + emit dataChanged(colS, colE); +} + SvnItemModelNode *SvnItemModel::findPath(const svn::Path &_p) { QString ip = _p.path(); diff --git a/src/svnfrontend/svnactions.h b/src/svnfrontend/svnactions.h --- a/src/svnfrontend/svnactions.h +++ b/src/svnfrontend/svnactions.h @@ -231,13 +231,13 @@ void sigRefreshAll(); void sigThreadsChanged(); void sigRefreshCurrent(SvnItem *); - void sigRefreshIcons(); void sigExtraLogMsg(const QString &); void sigGotourl(const QUrl &); void sigCacheStatus(qlonglong, qlonglong); void sigCacheDataChanged(); void sigItemsReverted(const QStringList &); void sigExtraStatusMessage(const QString &); + void sigRefreshItem(const QString &path); protected Q_SLOTS: virtual void checkModifiedThread(); diff --git a/src/svnfrontend/svnactions.cpp b/src/svnfrontend/svnactions.cpp --- a/src/svnfrontend/svnactions.cpp +++ b/src/svnfrontend/svnactions.cpp @@ -1919,6 +1919,7 @@ return; } m_Data->m_conflictCache.deleteKey(path, false); + emit sigRefreshItem(path); } void SvnActions::slotResolve(const QString &p) @@ -2496,12 +2497,12 @@ } else if (ptr->nodeStatus() == svn_wc_status_conflicted) { m_Data->m_conflictCache.insertKey(ptr, ptr->path()); } + emit sigRefreshItem(ptr->path()); } sigExtraStatusMessage(i18np("Found %1 modified item", "Found %1 modified items", sEntries.size())); delete m_CThread; m_CThread = nullptr; emit sigCacheDataChanged(); - emit sigRefreshIcons(); } void SvnActions::checkUpdateThread() @@ -2526,8 +2527,8 @@ !(ptr->entry().lockEntry().Locked())) { m_Data->m_repoLockCache.insertKey(ptr, ptr->path()); } + emit sigRefreshItem(ptr->path()); } - emit sigRefreshIcons(); emit sigExtraStatusMessage(i18n("Checking for updates finished")); if (newer) { emit sigExtraStatusMessage(i18n("There are new items in repository")); @@ -2553,6 +2554,7 @@ { if (what->nodeStatus() == svn_wc_status_conflicted) { m_Data->m_conflictCache.insertKey(what, what->path()); + emit sigRefreshItem(what->path()); } else { m_Data->m_Cache.insertKey(what, what->path()); } @@ -2563,6 +2565,7 @@ m_Data->m_Cache.deleteKey(what, true); m_Data->m_conflictCache.deleteKey(what, true); //m_Data->m_Cache.dump_tree(); + emit sigRefreshItem(what); } bool SvnActions::checkModifiedCache(const QString &path) const