From: Peter Penz Date: Thu, 30 Jul 2009 06:21:35 +0000 (+0000) Subject: If the revision states have been changed because of executing a SVN context menu... X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/9470f30828e7b86d8c60700bfb27f161e7327276 If the revision states have been changed because of executing a SVN context menu action, the resulting update should be done silently without information messages. svn path=/trunk/KDE/kdebase/apps/; revision=1004412 --- diff --git a/src/revisioncontrolobserver.cpp b/src/revisioncontrolobserver.cpp index b37acb4cb..6ecba64c5 100644 --- a/src/revisioncontrolobserver.cpp +++ b/src/revisioncontrolobserver.cpp @@ -105,6 +105,7 @@ RevisionControlObserver::RevisionControlObserver(QAbstractItemView* view) : QObject(view), m_pendingItemStatesUpdate(false), m_revisionedDirectory(false), + m_silentUpdate(false), m_view(view), m_dirLister(0), m_dolphinModel(0), @@ -168,6 +169,13 @@ QList RevisionControlObserver::contextMenuActions(const QString& direc void RevisionControlObserver::delayedDirectoryVerification() { + m_silentUpdate = false; + m_dirVerificationTimer->start(); +} + +void RevisionControlObserver::silentDirectoryVerification() +{ + m_silentUpdate = true; m_dirVerificationTimer->start(); } @@ -213,7 +221,7 @@ void RevisionControlObserver::verifyDirectory() connect(m_dirLister, SIGNAL(newItems(const KFileItemList&)), this, SLOT(delayedDirectoryVerification())); connect(m_plugin, SIGNAL(revisionStatesChanged()), - this, SLOT(delayedDirectoryVerification())); + this, SLOT(silentDirectoryVerification())); } updateItemStates(); } else if (m_revisionedDirectory) { @@ -228,13 +236,14 @@ void RevisionControlObserver::verifyDirectory() disconnect(m_dirLister, SIGNAL(newItems(const KFileItemList&)), this, SLOT(delayedDirectoryVerification())); disconnect(m_plugin, SIGNAL(revisionStatesChanged()), - this, SLOT(delayedDirectoryVerification())); + this, SLOT(silentDirectoryVerification())); } } void RevisionControlObserver::applyUpdatedItemStates() { if (!m_updateItemStatesThread->retrievedItems()) { + // ignore m_silentUpdate for an error message emit errorMessage(i18nc("@info:status", "Update of revision information failed.")); return; } @@ -256,10 +265,12 @@ void RevisionControlObserver::applyUpdatedItemStates() m_dolphinModel->blockSignals(signalsBlocked); m_view->viewport()->repaint(); - // Using an empty message results in clearing the previously shown information message and showing - // the default status bar information. This is useful as the user already gets feedback that the - // operation has been completed because of the icon emblems. - emit operationCompletedMessage(QString()); + if (!m_silentUpdate) { + // Using an empty message results in clearing the previously shown information message and showing + // the default status bar information. This is useful as the user already gets feedback that the + // operation has been completed because of the icon emblems. + emit operationCompletedMessage(QString()); + } if (m_pendingItemStatesUpdate) { m_pendingItemStatesUpdate = false; @@ -298,7 +309,9 @@ void RevisionControlObserver::updateItemStates() itemStates.append(itemState); } - emit infoMessage(i18nc("@info:status", "Updating revision information...")); + if (!m_silentUpdate) { + emit infoMessage(i18nc("@info:status", "Updating revision information...")); + } m_updateItemStatesThread->setData(m_plugin, itemStates); m_updateItemStatesThread->start(); // applyUpdatedItemStates() is called when finished } diff --git a/src/revisioncontrolobserver.h b/src/revisioncontrolobserver.h index 4decbda7f..c4df752c4 100644 --- a/src/revisioncontrolobserver.h +++ b/src/revisioncontrolobserver.h @@ -78,7 +78,21 @@ signals: void operationCompletedMessage(const QString& msg); private slots: + /** + * Invokes verifyDirectory() with a small delay. If delayedDirectoryVerification() + * is invoked before the delay has been exceeded, the delay will be reset. This + * assures that a lot of short requests for directory verification only result + * in one (expensive) call. + */ void delayedDirectoryVerification(); + + /** + * Invokes verifyDirectory() with a small delay. In opposite to + * delayedDirectoryVerification() it and assures that the verification of + * the directory is done silently without information messages. + */ + void silentDirectoryVerification(); + void verifyDirectory(); void applyUpdatedItemStates(); @@ -95,6 +109,8 @@ private: bool m_pendingItemStatesUpdate; bool m_revisionedDirectory; + bool m_silentUpdate; // if true, no messages will be send during the update + // of revision states QAbstractItemView* m_view; KDirLister* m_dirLister;