]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/views/renamedialog.cpp
Fix race condition and deadlock in the version plugin
[dolphin.git] / src / views / renamedialog.cpp
index ee2b15e6ea1a0277e7577025a67cf69512530d57..a91f91b1b431246ad6e04cfc28c59d6f615bdf82 100644 (file)
@@ -24,6 +24,7 @@
 #include <konq_operations.h>
 #include <KStringHandler>
 #include <knuminput.h>
+#include <kmimetype.h>
 
 #include <QHBoxLayout>
 #include <QLabel>
@@ -86,7 +87,9 @@ RenameDialog::RenameDialog(QWidget *parent, const KFileItemList& items) :
     if (m_renameOneItem) {
         const QString fileName = items.first().url().prettyUrl();
         const QString extension = KMimeType::extractKnownExtension(fileName.toLower());
-        if (extension.length() > 0) {
+
+        // If the current item is a directory, select the whole file name.
+        if ((extension.length() > 0) && !items.first().isDir()) {
             // Don't select the extension
             selectionLength -= extension.length() + 1;
         }
@@ -141,22 +144,18 @@ void RenameDialog::slotButtonClicked(int button)
 void RenameDialog::slotTextChanged(const QString& newName)
 {
     bool enable = !newName.isEmpty() && (newName != QLatin1String("..")) && (newName != QLatin1String("."));
-    if (enable) {
-        if (m_renameOneItem) {
-            enable = enable && (newName != m_newName);
-        } else {
-            // Assure that the new name contains exactly one # (or a connected sequence of #'s)
-            const int minSplitCount = 1;
-            int maxSplitCount = 2;
-            if (newName.startsWith(QLatin1Char('#'))) {
-                --maxSplitCount;
-            }
-            if (newName.endsWith(QLatin1Char('#'))) {
-                --maxSplitCount;
-            }
-            const int splitCount = newName.split(QLatin1Char('#'), QString::SkipEmptyParts).count();
-            enable = enable && (splitCount >= minSplitCount) && (splitCount <= maxSplitCount);
+    if (enable && !m_renameOneItem) {
+        // Assure that the new name contains exactly one # (or a connected sequence of #'s)
+        const int minSplitCount = 1;
+        int maxSplitCount = 2;
+        if (newName.startsWith(QLatin1Char('#'))) {
+            --maxSplitCount;
+        }
+        if (newName.endsWith(QLatin1Char('#'))) {
+            --maxSplitCount;
         }
+        const int splitCount = newName.split(QLatin1Char('#'), QString::SkipEmptyParts).count();
+        enable = enable && (splitCount >= minSplitCount) && (splitCount <= maxSplitCount);
     }
     enableButtonOk(enable);
 }