]> cloud.milkyroute.net Git - dolphin.git/commitdiff
movetonewfolder: allow to move folders
authorMéven Car <meven@kde.org>
Thu, 10 Jul 2025 09:45:44 +0000 (11:45 +0200)
committerMéven Car <meven@kde.org>
Fri, 11 Jul 2025 07:49:34 +0000 (09:49 +0200)
 * Set a widget parent for the job.
 * Better deduce the current working directory

BUG: 506612

src/itemactions/movetonewfolderitemaction.cpp
src/itemactions/movetonewfolderitemaction.json

index cfd6f25eef9d8a2156a6f82111286555e9b15475..993d088b933c689940ff3a396949b9982ba8d129 100644 (file)
@@ -10,6 +10,7 @@
 #include <KLocalizedString>
 #include <KPluginFactory>
 #include <KNewFileMenu>
 #include <KLocalizedString>
 #include <KPluginFactory>
 #include <KNewFileMenu>
+#include <KJobWidgets>
 #include <KIO/CopyJob>
 #include <KIO/JobUiDelegate>
 #include <KIO/FileUndoManager>
 #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();
 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")));
 
     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);
         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);
         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();
         });
             KIO::FileUndoManager::self()->recordCopyJob(job);
             newFileMenu->deleteLater();
         });
index 185667c327e51010db99bcd0eccfcaa44053c7ae..ce394007d701cbca4bb31a2a76df87eb8d6a5f37 100644 (file)
@@ -2,7 +2,8 @@
     "KPlugin": {
         "Icon": "folder-new",
         "MimeTypes": [
     "KPlugin": {
         "Icon": "folder-new",
         "MimeTypes": [
-            "application/octet-stream"
+            "application/octet-stream",
+            "inode/directory"
         ],
         "Name": "Move to New Folder",
         "Name[ar]": "انقل إلى مجلد جديد",
         ],
         "Name": "Move to New Folder",
         "Name[ar]": "انقل إلى مجلد جديد",