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
This commit is contained in:
Peter Penz 2009-07-30 06:21:35 +00:00
parent ddc1461147
commit 9470f30828
2 changed files with 36 additions and 7 deletions

View file

@ -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<QAction*> 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
}

View file

@ -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;