┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/views
diff options
context:
space:
mode:
authorRafał Lichwała <[email protected]>2026-02-13 17:10:05 +0100
committerMéven Car <[email protected]>2026-02-15 10:22:01 +0000
commitaa229c536b84d120e0b74661db10044f64d5a5b2 (patch)
treecda6efb6b162bb79770d6f141d7573531ab934a0 /src/views
parent768c59f4669cd0e32f48d0ca65fa62b3c71eefb5 (diff)
dolphinview: indicate drops from Places view
This commit corrects previous attempt of bug fix done in https://invent.kde.org/frameworks/kio/-/commit/71b2b38b0c4fc4c7820fd95b031413d854d8f8c6?merge_request_iid=2074 which incorrectly recognized drop action from Places View (based only on missing Qt::MoveAction which had side effects described in BUG 514697) This time DolphinView indicates that the given dropEvent comes from Places View so we must avoid potentially destructive Move-like plugins actions. This is done by setting proper KIO::DropJobFlags additional flag for KIO::drop(). CCBUG: 509231 CCBUG: 514697
Diffstat (limited to 'src/views')
-rw-r--r--src/views/dolphinview.cpp12
-rw-r--r--src/views/draganddrophelper.cpp4
-rw-r--r--src/views/draganddrophelper.h17
3 files changed, 23 insertions, 10 deletions
diff --git a/src/views/dolphinview.cpp b/src/views/dolphinview.cpp
index 7e01b9a93..b01833d69 100644
--- a/src/views/dolphinview.cpp
+++ b/src/views/dolphinview.cpp
@@ -36,6 +36,7 @@
#include <KDesktopFile>
#include <KDirModel>
#include <KFileItemListProperties>
+#include <KFilePlacesView>
#include <KFormat>
#include <KIO/CopyJob>
#include <KIO/DeleteOrTrashJob>
@@ -1426,7 +1427,16 @@ void DolphinView::slotItemDropEvent(int index, QGraphicsSceneDragDropEvent *even
void DolphinView::dropUrls(const QUrl &destUrl, QDropEvent *dropEvent, QWidget *dropWidget)
{
- KIO::DropJob *job = DragAndDropHelper::dropUrls(destUrl, dropEvent, dropWidget);
+ KIO::DropJobFlags dropjobFlags;
+#if KIO_VERSION >= QT_VERSION_CHECK(6, 23, 0)
+ if (qobject_cast<KFilePlacesView *>(dropEvent->source())) {
+ // this drop comes from Places View so we want to avoid
+ // potentially destructive Move-like plugins actions
+ dropjobFlags |= KIO::DropJobFlag::ExcludePluginsActions;
+ }
+#endif
+
+ KIO::DropJob *job = DragAndDropHelper::dropUrls(destUrl, dropEvent, dropWidget, dropjobFlags);
if (job) {
connect(job, &KIO::DropJob::result, this, &DolphinView::slotJobResult);
diff --git a/src/views/draganddrophelper.cpp b/src/views/draganddrophelper.cpp
index a98483a79..125e4e79c 100644
--- a/src/views/draganddrophelper.cpp
+++ b/src/views/draganddrophelper.cpp
@@ -34,7 +34,7 @@ bool DragAndDropHelper::urlListMatchesUrl(const QList<QUrl> &urls, const QUrl &d
return *m_urlListMatchesUrlCache.insert(destUrl, destUrlMatches);
}
-KIO::DropJob *DragAndDropHelper::dropUrls(const QUrl &destUrl, QDropEvent *event, QWidget *window)
+KIO::DropJob *DragAndDropHelper::dropUrls(const QUrl &destUrl, QDropEvent *event, QWidget *window, KIO::DropJobFlags dropjobFlags)
{
const QMimeData *mimeData = event->mimeData();
if (isArkDndMimeType(mimeData)) {
@@ -53,7 +53,7 @@ KIO::DropJob *DragAndDropHelper::dropUrls(const QUrl &destUrl, QDropEvent *event
}
// Drop into a directory or a desktop-file
- KIO::DropJob *job = KIO::drop(event, destUrl);
+ KIO::DropJob *job = KIO::drop(event, destUrl, dropjobFlags);
KJobWidgets::setWindow(job, window);
return job;
}
diff --git a/src/views/draganddrophelper.h b/src/views/draganddrophelper.h
index 73043febc..45f7e5dc9 100644
--- a/src/views/draganddrophelper.h
+++ b/src/views/draganddrophelper.h
@@ -11,6 +11,7 @@
#include "dolphin_export.h"
#include <KFileItem>
+#include <KIO/DropJob>
#include <QList>
#include <QString>
@@ -33,14 +34,16 @@ public:
* offered to the user. The drag destination must represent a directory or
* a desktop-file, otherwise the dropping gets ignored.
*
- * @param destUrl URL of the item destination. Is used only if destItem::isNull()
- * is true.
- * @param event Drop event.
- * @param window Widget where the drop happened, will be used as parent of the drop menu.
- * @return KIO::DropJob pointer or null in case the destUrl is contained
- * in the mimeData url list.
+ * @param destUrl URL of the item destination. Is used only if destItem::isNull()
+ * is true.
+ * @param event Drop event.
+ * @param window Widget where the drop happened, will be used as parent of the drop menu.
+ * @param dropjobFlags Additional KIO::DropJobFlags passed to KIO::drop
+ * @return KIO::DropJob pointer or null in case the destUrl is contained
+ * in the mimeData url list.
*/
- static KIO::DropJob *dropUrls(const QUrl &destUrl, QDropEvent *event, QWidget *window);
+ static KIO::DropJob *
+ dropUrls(const QUrl &destUrl, QDropEvent *event, QWidget *window, KIO::DropJobFlags dropjobFlags = KIO::DropJobFlag::DropJobDefaultFlags);
/**
* Checks if the destination supports dropping.