]> cloud.milkyroute.net Git - dolphin.git/blob - src/itemactions/movetonewfolderitemaction.cpp
movetonewfolder: allow to move folders
[dolphin.git] / src / itemactions / movetonewfolderitemaction.cpp
1 /*
2 * SPDX-FileCopyrightText: 2024 Ahmet Hakan Çelik <mail@ahakan.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7 #include "movetonewfolderitemaction.h"
8
9 #include <KFileItem>
10 #include <KLocalizedString>
11 #include <KPluginFactory>
12 #include <KNewFileMenu>
13 #include <KJobWidgets>
14 #include <KIO/CopyJob>
15 #include <KIO/JobUiDelegate>
16 #include <KIO/FileUndoManager>
17
18 #include <QUrl>
19
20 K_PLUGIN_CLASS_WITH_JSON(MoveToNewFolderItemAction, "movetonewfolderitemaction.json")
21
22 MoveToNewFolderItemAction::MoveToNewFolderItemAction(QObject *parent)
23 : KAbstractFileItemActionPlugin(parent)
24 {
25
26 }
27
28 QList<QAction *> MoveToNewFolderItemAction::actions(const KFileItemListProperties &fileItemInfos, QWidget *parentWidget)
29 {
30 const KFileItemList &selectedItems = fileItemInfos.items();
31
32 if (selectedItems.size() == 1 && selectedItems[0].isDir()) {
33 // skip single directory like the current working directory
34 return {};
35 }
36
37 QAction *createFolderFromSelected = new QAction(i18nc("@action:inmenu", "Move to New Folder…"), parentWidget);
38 createFolderFromSelected->setIcon(QIcon::fromTheme(QStringLiteral("folder-new")));
39 connect(createFolderFromSelected, &QAction::triggered, this, [=]() {
40 const QUrl selectedFileDirPath = selectedItems.at(0).url().adjusted(QUrl::RemoveFilename | QUrl::StripTrailingSlash);
41 auto newFileMenu = new KNewFileMenu(parentWidget);
42 newFileMenu->setWorkingDirectory(selectedFileDirPath);
43 newFileMenu->createDirectory();
44
45 connect(newFileMenu, &KNewFileMenu::directoryCreated, this, [=](const QUrl &createdUrl) {
46 KIO::CopyJob *job = KIO::move(selectedItems.urlList(), createdUrl);
47 KJobWidgets::setWindow(job, parentWidget);
48 KIO::FileUndoManager::self()->recordCopyJob(job);
49 newFileMenu->deleteLater();
50 });
51 });
52
53 return {createFolderFromSelected};
54 }
55
56 #include "movetonewfolderitemaction.moc"
57
58 #include "moc_movetonewfolderitemaction.cpp"