diff --git a/applets/taskmanager/plugin/draghelper.cpp b/applets/taskmanager/plugin/draghelper.cpp --- a/applets/taskmanager/plugin/draghelper.cpp +++ b/applets/taskmanager/plugin/draghelper.cpp @@ -73,13 +73,11 @@ { QPointer grabber = item; - QList urlList; - urlList.append(Backend::tryDecodeApplicationsUrl(url)); - QMimeData *dragData = new QMimeData(); + const QByteArray &taskUrlData = Backend::tryDecodeApplicationsUrl(url).toString().toUtf8(); + dragData->setData("text/x-orgkdeplasmataskmanager_taskurl", taskUrlData); dragData->setData(mimeType, mimeData.toByteArray()); dragData->setData("application/x-orgkdeplasmataskmanager_taskbuttonitem", mimeData.toByteArray()); - dragData->setUrls(urlList); QDrag *drag = new QDrag(static_cast(parent())); drag->setMimeData(dragData); diff --git a/containments/desktop/package/contents/ui/code/FolderTools.js b/containments/desktop/package/contents/ui/code/FolderTools.js --- a/containments/desktop/package/contents/ui/code/FolderTools.js +++ b/containments/desktop/package/contents/ui/code/FolderTools.js @@ -68,8 +68,9 @@ } function isFileDrag(event) { + var taskUrl = event.mimeData.formats.indexOf("text/x-orgkdeplasmataskmanager_taskurl") != -1; var arkService = event.mimeData.formats.indexOf("application/x-kde-ark-dndextract-service") != -1; var arkPath = event.mimeData.formats.indexOf("application/x-kde-ark-dndextract-path") != -1; - return (event.mimeData.hasUrls || (arkService && arkPath)); + return (event.mimeData.hasUrls || taskUrl || (arkService && arkPath)); } diff --git a/containments/desktop/plugins/folder/foldermodel.cpp b/containments/desktop/plugins/folder/foldermodel.cpp --- a/containments/desktop/plugins/folder/foldermodel.cpp +++ b/containments/desktop/plugins/folder/foldermodel.cpp @@ -1107,6 +1107,11 @@ return; } + // Catch drops from a Task Manager and convert to usable URL. + if (!mimeData->hasUrls() && mimeData->hasFormat(QStringLiteral("text/x-orgkdeplasmataskmanager_taskurl"))) { + QList urls = {QUrl(QString::fromUtf8(mimeData->data(QStringLiteral("text/x-orgkdeplasmataskmanager_taskurl"))))}; + mimeData->setUrls(urls); + } if (m_usedByContainment && !m_screenMapper->sharedDesktops()) { if (isDropBetweenSharedViews(mimeData->urls(), dropTargetFolderUrl)) {