|
|
|
|
@ -29,6 +29,7 @@ |
|
|
|
|
#include <KIO/FileUndoManager> |
|
|
|
|
#include <KIO/JobUiDelegate> |
|
|
|
|
#include <KIO/OpenFileManagerWindowJob> |
|
|
|
|
#include <KIO/WidgetsAskUserActionHandler> |
|
|
|
|
|
|
|
|
|
FileMenu::FileMenu(QObject *parent) |
|
|
|
|
: QObject(parent) |
|
|
|
|
@ -147,14 +148,16 @@ void FileMenu::open(int x, int y) |
|
|
|
|
const bool canTrash = itemProperties.isLocal() && itemProperties.supportsMoving(); |
|
|
|
|
if (canTrash) { |
|
|
|
|
auto moveToTrashLambda = [this] { |
|
|
|
|
const QList<QUrl> urls{m_url}; |
|
|
|
|
|
|
|
|
|
KIO::JobUiDelegate uiDelegate; |
|
|
|
|
if (uiDelegate.askDeleteConfirmation(urls, KIO::JobUiDelegate::Trash, KIO::JobUiDelegate::DefaultConfirmation)) { |
|
|
|
|
auto *job = KIO::trash(urls); |
|
|
|
|
auto handler = new KIO::WidgetsAskUserActionHandler(this); |
|
|
|
|
connect(handler, &KIO::WidgetsAskUserActionHandler::askUserDeleteResult, [handler](bool allow, const QList<QUrl> &urls) { |
|
|
|
|
if (allow) { |
|
|
|
|
auto job = KIO::trash(urls); |
|
|
|
|
job->uiDelegate()->setAutoErrorHandlingEnabled(true); |
|
|
|
|
KIO::FileUndoManager::self()->recordJob(KIO::FileUndoManager::Trash, urls, QUrl(QStringLiteral("trash:/")), job); |
|
|
|
|
} |
|
|
|
|
handler->deleteLater(); |
|
|
|
|
}); |
|
|
|
|
handler->askUserDelete({m_url}, KIO::AskUserActionInterface::Trash, KIO::AskUserActionInterface::DefaultConfirmation); |
|
|
|
|
}; |
|
|
|
|
QAction *moveToTrashAction = KStandardAction::moveToTrash(this, moveToTrashLambda, menu); |
|
|
|
|
moveToTrashAction->setShortcut({}); // Can't focus notification to press Delete
|
|
|
|
|
@ -166,13 +169,15 @@ void FileMenu::open(int x, int y) |
|
|
|
|
|
|
|
|
|
if (itemProperties.supportsDeleting() && (!canTrash || showDeleteCommand)) { |
|
|
|
|
auto deleteLambda = [this] { |
|
|
|
|
const QList<QUrl> urls{m_url}; |
|
|
|
|
|
|
|
|
|
KIO::JobUiDelegate uiDelegate; |
|
|
|
|
if (uiDelegate.askDeleteConfirmation(urls, KIO::JobUiDelegate::Delete, KIO::JobUiDelegate::DefaultConfirmation)) { |
|
|
|
|
auto *job = KIO::del(urls); |
|
|
|
|
auto handler = new KIO::WidgetsAskUserActionHandler(this); |
|
|
|
|
connect(handler, &KIO::WidgetsAskUserActionHandler::askUserDeleteResult, [handler](bool allow, const QList<QUrl> &urls) { |
|
|
|
|
if (allow) { |
|
|
|
|
auto job = KIO::del(urls); |
|
|
|
|
job->uiDelegate()->setAutoErrorHandlingEnabled(true); |
|
|
|
|
} |
|
|
|
|
handler->deleteLater(); |
|
|
|
|
}); |
|
|
|
|
handler->askUserDelete({m_url}, KIO::AskUserActionInterface::Delete, KIO::AskUserActionInterface::DefaultConfirmation); |
|
|
|
|
}; |
|
|
|
|
QAction *deleteAction = KStandardAction::deleteFile(this, deleteLambda, menu); |
|
|
|
|
deleteAction->setShortcut({}); |
|
|
|
|
|