2 * SPDX-FileCopyrightText: 2024 Ahmet Hakan Çelik <mail@ahakan.com>
4 * SPDX-License-Identifier: GPL-2.0-or-later
7 #include "movetonewfolderitemaction.h"
10 #include <KLocalizedString>
11 #include <KPluginFactory>
12 #include <KNewFileMenu>
13 #include <KJobWidgets>
14 #include <KIO/CopyJob>
15 #include <KIO/JobUiDelegate>
16 #include <KIO/FileUndoManager>
20 K_PLUGIN_CLASS_WITH_JSON(MoveToNewFolderItemAction
, "movetonewfolderitemaction.json")
22 MoveToNewFolderItemAction::MoveToNewFolderItemAction(QObject
*parent
)
23 : KAbstractFileItemActionPlugin(parent
)
28 QList
<QAction
*> MoveToNewFolderItemAction::actions(const KFileItemListProperties
&fileItemInfos
, QWidget
*parentWidget
)
30 const KFileItemList
&selectedItems
= fileItemInfos
.items();
32 if (selectedItems
.size() == 1 && selectedItems
[0].isDir()) {
33 // skip single directory like the current working directory
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();
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();
53 return {createFolderFromSelected
};
56 #include "movetonewfolderitemaction.moc"
58 #include "moc_movetonewfolderitemaction.cpp"