diff --git a/src/vs/base/browser/dnd.ts b/src/vs/base/browser/dnd.ts index b95e397071f3824a9705451e89914053dfabce18..85bc36aac42c99eda644743eaf718f8c525cfd55 100644 --- a/src/vs/base/browser/dnd.ts +++ b/src/vs/base/browser/dnd.ts @@ -49,6 +49,11 @@ export const DataTransfers = { */ URL: 'URL', + /** + * Application specific resource transfer type when multiple resources are being dragged. + */ + URLS: 'URLS', + /** * Browser specific transfer type to download. */ @@ -58,4 +63,4 @@ export const DataTransfers = { * Typicaly transfer type for copy/paste transfers. */ TEXT: 'text/plain' -}; \ No newline at end of file +}; diff --git a/src/vs/workbench/browser/editor.ts b/src/vs/workbench/browser/editor.ts index 16a6140a6e4f60807213dc957ee3ab88583e7f55..35486960348cbf55322f011a05d4c2578a921f90 100644 --- a/src/vs/workbench/browser/editor.ts +++ b/src/vs/workbench/browser/editor.ts @@ -241,13 +241,19 @@ export function extractResources(e: DragEvent, externalOnly?: boolean): (IDragge // Data Transfer: URL else { - const rawURLData = e.dataTransfer.getData(DataTransfers.URL); - if (rawURLData) { - try { - resources.push({ resource: URI.parse(rawURLData), isExternal: false }); - } catch (error) { - // Invalid URI + try { + const rawURLsData = e.dataTransfer.getData(DataTransfers.URLS); + if (rawURLsData) { + const uriStrArray: string[] = JSON.parse(rawURLsData); + resources.push(...uriStrArray.map(uriStr => ({ resource: URI.parse(uriStr), isExternal: false }))); + } else { + const rawURLData = e.dataTransfer.getData(DataTransfers.URL); + if (rawURLData) { + resources.push({ resource: URI.parse(rawURLData), isExternal: false }); + } } + } catch (error) { + // Invalid URI } } } @@ -268,4 +274,4 @@ export function extractResources(e: DragEvent, externalOnly?: boolean): (IDragge } return resources; -} \ No newline at end of file +} diff --git a/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.ts b/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.ts index bb28488cbc6c91b96d30b2c4a451775495ba049b..5545d81451185c65ac3a721b14b6586f3f63bdb9 100644 --- a/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.ts +++ b/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.ts @@ -726,13 +726,14 @@ export class FileDragAndDrop extends SimpleFileResourceDragAndDrop { }); // Apply some datatransfer types to allow for dragging the element outside of the application - // TODO@Isidor check this if (sources.length === 1) { if (!sources[0].isDirectory) { originalEvent.dataTransfer.setData(DataTransfers.DOWNLOAD_URL, [MIME_BINARY, sources[0].name, sources[0].resource.toString()].join(':')); } originalEvent.dataTransfer.setData(DataTransfers.TEXT, getPathLabel(sources[0].resource)); + } else { + originalEvent.dataTransfer.setData(DataTransfers.URLS, JSON.stringify(sources.map(s => s.resource.toString()))); } } }