From e058bde3ea1632edc1424dfe406e29c673c4aff5 Mon Sep 17 00:00:00 2001 From: Joao Moreno Date: Wed, 21 Sep 2016 17:24:05 +0200 Subject: [PATCH] fix tree dnd drag image fixes #12311 --- src/vs/base/parts/tree/browser/tree.ts | 5 ++++ src/vs/base/parts/tree/browser/treeView.ts | 23 +++++++++++-------- .../files/browser/views/explorerViewer.ts | 9 ++++++++ 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/src/vs/base/parts/tree/browser/tree.ts b/src/vs/base/parts/tree/browser/tree.ts index 22d69d66f8f..5d5899bac2e 100644 --- a/src/vs/base/parts/tree/browser/tree.ts +++ b/src/vs/base/parts/tree/browser/tree.ts @@ -558,6 +558,11 @@ export interface IDragAndDrop { */ getDragURI(tree: ITree, element: any): string; + /** + * Returns a label to display when dragging the element. + */ + getDragLabel?(tree: ITree, elements: any[]): string; + /** * Sent when the drag operation is starting. */ diff --git a/src/vs/base/parts/tree/browser/treeView.ts b/src/vs/base/parts/tree/browser/treeView.ts index df5ad1741f9..689255f097e 100644 --- a/src/vs/base/parts/tree/browser/treeView.ts +++ b/src/vs/base/parts/tree/browser/treeView.ts @@ -1277,17 +1277,20 @@ export class TreeView extends HeightMap { e.dataTransfer.effectAllowed = 'copyMove'; e.dataTransfer.setData('URL', item.uri); if(e.dataTransfer.setDragImage) { - if (elements.length === 1 && item.element) { - e.dataTransfer.setDragImage(item.element, e.offsetX || 6, e.offsetY || 6); - - } else if (elements.length > 1) { - var dragImage = document.createElement('div'); - dragImage.className = 'monaco-tree-drag-image'; - dragImage.textContent = '' + elements.length; - document.body.appendChild(dragImage); - e.dataTransfer.setDragImage(dragImage, -10, -10); - setTimeout(() => document.body.removeChild(dragImage), 0); + let label: string; + + if (this.context.dnd.getDragLabel) { + label = this.context.dnd.getDragLabel(this.context.tree, elements); + } else { + label = String(elements.length); } + + const dragImage = document.createElement('div'); + dragImage.className = 'monaco-tree-drag-image'; + dragImage.textContent = label; + document.body.appendChild(dragImage); + e.dataTransfer.setDragImage(dragImage, -10, -10); + setTimeout(() => document.body.removeChild(dragImage), 0); } this.currentDragAndDropData = new dnd.ElementsDragAndDropData(elements); diff --git a/src/vs/workbench/parts/files/browser/views/explorerViewer.ts b/src/vs/workbench/parts/files/browser/views/explorerViewer.ts index 8eddf480d09..1493205c8a7 100644 --- a/src/vs/workbench/parts/files/browser/views/explorerViewer.ts +++ b/src/vs/workbench/parts/files/browser/views/explorerViewer.ts @@ -757,6 +757,15 @@ export class FileDragAndDrop implements IDragAndDrop { return stat.resource.toString(); } + getDragLabel(tree: ITree, elements: any[]): string { + if (elements.length > 1) { + return String(elements.length); + } + + const stat = elements[0] as FileStat; + return paths.basename(stat.resource.fsPath); + } + public onDragStart(tree: ITree, data: IDragAndDropData, originalEvent: DragMouseEvent): void { const sources: FileStat[] = data.getData(); let source: FileStat = null; -- GitLab