diff options
Diffstat (limited to 'src/views')
| -rw-r--r-- | src/views/draganddrophelper.cpp | 12 | ||||
| -rw-r--r-- | src/views/draganddrophelper.h | 11 |
2 files changed, 21 insertions, 2 deletions
diff --git a/src/views/draganddrophelper.cpp b/src/views/draganddrophelper.cpp index 01b41f8b2..831a9d43e 100644 --- a/src/views/draganddrophelper.cpp +++ b/src/views/draganddrophelper.cpp @@ -29,6 +29,14 @@ #include <KIO/DropJob> #include <KJobWidgets> + +bool DragAndDropHelper::urlListMatchesUrl(const QList<QUrl>& urls, const QUrl& destUrl) +{ + return std::find_if(urls.constBegin(), urls.constEnd(), [destUrl](const QUrl& url) { + return url.matches(destUrl, QUrl::StripTrailingSlash); + }) != urls.constEnd(); +} + KIO::DropJob* DragAndDropHelper::dropUrls(const QUrl& destUrl, QDropEvent* event, QWidget* window) { const QMimeData* mimeData = event->mimeData(); @@ -42,6 +50,10 @@ KIO::DropJob* DragAndDropHelper::dropUrls(const QUrl& destUrl, QDropEvent* event message.setArguments({destUrl.toDisplayString(QUrl::PreferLocalFile)}); QDBusConnection::sessionBus().call(message); } else { + if (urlListMatchesUrl(event->mimeData()->urls(), destUrl)) { + return nullptr; + } + // Drop into a directory or a desktop-file KIO::DropJob *job = KIO::drop(event, destUrl); KJobWidgets::setWindow(job, window); diff --git a/src/views/draganddrophelper.h b/src/views/draganddrophelper.h index 3153f06ef..e47f83ca8 100644 --- a/src/views/draganddrophelper.h +++ b/src/views/draganddrophelper.h @@ -22,9 +22,10 @@ #define DRAGANDDROPHELPER_H #include "dolphin_export.h" +#include <QList> +#include <QUrl> -class QUrl; class QDropEvent; class QWidget; namespace KIO { class DropJob; } @@ -42,11 +43,17 @@ public: * 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 + * @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); + + /** + * @return True if destUrl is contained in the urls parameter. + */ + static bool urlListMatchesUrl(const QList<QUrl>& urls, const QUrl& destUrl); }; #endif |
