]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/itemactions/movetonewfolderitemaction.cpp
movetonewfolder: allow to move folders
[dolphin.git] / src / itemactions / movetonewfolderitemaction.cpp
index cfd6f25eef9d8a2156a6f82111286555e9b15475..993d088b933c689940ff3a396949b9982ba8d129 100644 (file)
@@ -10,6 +10,7 @@
 #include <KLocalizedString>
 #include <KPluginFactory>
 #include <KNewFileMenu>
+#include <KJobWidgets>
 #include <KIO/CopyJob>
 #include <KIO/JobUiDelegate>
 #include <KIO/FileUndoManager>
@@ -27,22 +28,23 @@ MoveToNewFolderItemAction::MoveToNewFolderItemAction(QObject *parent)
 QList<QAction *> MoveToNewFolderItemAction::actions(const KFileItemListProperties &fileItemInfos, QWidget *parentWidget)
 {
     const KFileItemList &selectedItems = fileItemInfos.items();
+    
+    if (selectedItems.size() == 1 && selectedItems[0].isDir()) {
+        // skip single directory like the current working directory
+        return {};
+    }
 
     QAction *createFolderFromSelected = new QAction(i18nc("@action:inmenu", "Move to New Folder…"), parentWidget);
     createFolderFromSelected->setIcon(QIcon::fromTheme(QStringLiteral("folder-new")));
-    connect(createFolderFromSelected, &QAction::triggered, this, [=, this]() {
-        QString selectedFileDirPath = selectedItems.at(0).url().toString().remove(selectedItems.at(0).name());
-        if (selectedFileDirPath.endsWith(QStringLiteral("/"))) {
-            selectedFileDirPath.removeLast();
-        }
-        const QUrl newFolderDirUrl(selectedFileDirPath);
-
+    connect(createFolderFromSelected, &QAction::triggered, this, [=]() {
+        const QUrl selectedFileDirPath = selectedItems.at(0).url().adjusted(QUrl::RemoveFilename | QUrl::StripTrailingSlash);
         auto newFileMenu = new KNewFileMenu(parentWidget);
-        newFileMenu->setWorkingDirectory(newFolderDirUrl);
+        newFileMenu->setWorkingDirectory(selectedFileDirPath);
         newFileMenu->createDirectory();
 
         connect(newFileMenu, &KNewFileMenu::directoryCreated, this, [=](const QUrl &createdUrl) {
             KIO::CopyJob *job = KIO::move(selectedItems.urlList(), createdUrl);
+            KJobWidgets::setWindow(job, parentWidget);
             KIO::FileUndoManager::self()->recordCopyJob(job);
             newFileMenu->deleteLater();
         });