]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/versioncontrol/fileviewsvnplugin.cpp
Get back names, and use "using" keyword to keep GCC silent on "method foo on base...
[dolphin.git] / src / versioncontrol / fileviewsvnplugin.cpp
index 91a37a8782939e00633e3b582c39f74c633b88a3..f43f10e98d97c07000692ecd52aba7d0f5b456b0 100644 (file)
@@ -43,6 +43,7 @@ K_EXPORT_PLUGIN(FileViewSvnPluginFactory("fileviewsvnplugin"))
 
 FileViewSvnPlugin::FileViewSvnPlugin(QObject* parent, const QList<QVariant>& args) :
     KVersionControlPlugin(parent),
+    m_pendingOperation(false),
     m_versionInfoHash(),
     m_versionInfoKeys(),
     m_updateAction(0),
@@ -102,6 +103,15 @@ bool FileViewSvnPlugin::beginRetrieval(const QString& directory)
 {
     Q_ASSERT(directory.endsWith('/'));
 
+    // clear all entries for this directory
+    QMutableHashIterator<QString, VersionState> it(m_versionInfoHash);
+    while (it.hasNext()) {
+        it.next();
+        if (it.key().startsWith(directory)) {
+            it.remove();
+        }
+    }
+
     QStringList arguments;
     arguments << "status" << "--show-updates" << directory;
 
@@ -213,7 +223,7 @@ QList<QAction*> FileViewSvnPlugin::contextMenuActions(const KFileItemList& items
 
 QList<QAction*> FileViewSvnPlugin::contextMenuActions(const QString& directory)
 {
-    const bool enabled = m_contextItems.isEmpty();
+    const bool enabled = !m_pendingOperation;
     if (enabled) {
         m_contextDir = directory;
     }
@@ -311,6 +321,8 @@ void FileViewSvnPlugin::removeFiles()
 
 void FileViewSvnPlugin::slotOperationCompleted(int exitCode, QProcess::ExitStatus exitStatus)
 {
+    m_pendingOperation = false;
+
     if ((exitStatus != QProcess::NormalExit) || (exitCode != 0)) {
         emit errorMessage(m_errorMsg);
     } else if (m_contextItems.isEmpty()) {
@@ -323,10 +335,11 @@ void FileViewSvnPlugin::slotOperationCompleted(int exitCode, QProcess::ExitStatu
 
 void FileViewSvnPlugin::slotOperationError()
 {
-    emit errorMessage(m_errorMsg);
-
     // don't do any operation on other items anymore
     m_contextItems.clear();
+    m_pendingOperation = false;
+
+    emit errorMessage(m_errorMsg);
 }
 
 void FileViewSvnPlugin::execSvnCommand(const QString& svnCommand,
@@ -345,6 +358,8 @@ void FileViewSvnPlugin::execSvnCommand(const QString& svnCommand,
 
 void FileViewSvnPlugin::startSvnCommandProcess()
 {
+    m_pendingOperation = true;
+
     QProcess* process = new QProcess(this);
     connect(process, SIGNAL(finished(int, QProcess::ExitStatus)),
             this, SLOT(slotOperationCompleted(int, QProcess::ExitStatus)));