Skip to content

Commit 8ddffb5

Browse files
author
Benjamin Pasero
committed
fix some dnd issues after getting feedback
1 parent ecc90f4 commit 8ddffb5

3 files changed

Lines changed: 18 additions & 11 deletions

File tree

src/vs/workbench/browser/dnd.ts

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -373,15 +373,18 @@ export function fillResourceDataTransfers(accessor: ServicesAccessor, resources:
373373
}
374374

375375
// Resource URLs: allows to drop multiple resources to a target in VS Code (not directories)
376-
event.dataTransfer.setData(DataTransfers.RESOURCES, JSON.stringify(sources.filter(s => !s.isDirectory).map(s => s.resource.toString())));
376+
const files = sources.filter(s => !s.isDirectory);
377+
if (files.length) {
378+
event.dataTransfer.setData(DataTransfers.RESOURCES, JSON.stringify(files.map(f => f.resource.toString())));
379+
}
377380

378381
// Editors: enables cross window DND of tabs into the editor area
379382
const textFileService = accessor.get(ITextFileService);
380383
const backupFileService = accessor.get(IBackupFileService);
381384
const editorService = accessor.get(IWorkbenchEditorService);
382385

383386
const draggedEditors: ISerializedDraggedEditor[] = [];
384-
sources.forEach(source => {
387+
files.forEach(file => {
385388

386389
// Try to find editor view state from the visible editors that match given resource
387390
let viewState: IEditorViewState;
@@ -391,7 +394,7 @@ export function fillResourceDataTransfers(accessor: ServicesAccessor, resources:
391394
const codeEditor = getCodeEditor(editor);
392395
if (codeEditor) {
393396
const model = codeEditor.getModel();
394-
if (model && model.uri && model.uri.toString() === source.resource.toString()) {
397+
if (model && model.uri && model.uri.toString() === file.resource.toString()) {
395398
viewState = codeEditor.saveViewState();
396399
break;
397400
}
@@ -400,13 +403,15 @@ export function fillResourceDataTransfers(accessor: ServicesAccessor, resources:
400403

401404
// Add as dragged editor
402405
draggedEditors.push({
403-
resource: source.resource.toString(),
404-
backupResource: textFileService.isDirty(source.resource) ? backupFileService.toBackupResource(source.resource).toString() : void 0,
406+
resource: file.resource.toString(),
407+
backupResource: textFileService.isDirty(file.resource) ? backupFileService.toBackupResource(file.resource).toString() : void 0,
405408
viewState
406409
});
407410
});
408411

409-
event.dataTransfer.setData(CodeDataTransfers.EDITORS, JSON.stringify(draggedEditors));
412+
if (draggedEditors.length) {
413+
event.dataTransfer.setData(CodeDataTransfers.EDITORS, JSON.stringify(draggedEditors));
414+
}
410415
}
411416

412417
/**

src/vs/workbench/parts/files/electron-browser/views/explorerViewer.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ import { attachInputBoxStyler } from 'vs/platform/theme/common/styler';
5050
import { IThemeService } from 'vs/platform/theme/common/themeService';
5151
import { IWindowService } from 'vs/platform/windows/common/windows';
5252
import { IWorkspaceEditingService } from 'vs/workbench/services/workspace/common/workspaceEditing';
53-
import { extractResources, SimpleFileResourceDragAndDrop, CodeDataTransfers } from 'vs/workbench/browser/dnd';
53+
import { extractResources, SimpleFileResourceDragAndDrop, CodeDataTransfers, fillResourceDataTransfers } from 'vs/workbench/browser/dnd';
5454
import { relative } from 'path';
5555
import { distinctParents } from 'vs/base/common/resources';
5656
import { WorkbenchTree, WorkbenchTreeController } from 'vs/platform/list/browser/listService';
@@ -729,12 +729,14 @@ export class FileDragAndDrop extends SimpleFileResourceDragAndDrop {
729729
});
730730

731731
// Apply some datatransfer types to allow for dragging the element outside of the application
732-
super.onDragStart(tree, data, originalEvent);
732+
this.instantiationService.invokeFunction(fillResourceDataTransfers, sources, originalEvent);
733733

734734
// The only custom data transfer we set from the explorer is a file transfer
735735
// to be able to DND between multiple code file explorers across windows
736736
const fileResources = sources.filter(s => !s.isDirectory && s.resource.scheme === Schemas.file).map(r => r.resource.fsPath);
737-
originalEvent.dataTransfer.setData(CodeDataTransfers.FILES, JSON.stringify(fileResources));
737+
if (fileResources.length) {
738+
originalEvent.dataTransfer.setData(CodeDataTransfers.FILES, JSON.stringify(fileResources));
739+
}
738740
}
739741
}
740742

src/vs/workbench/parts/files/electron-browser/views/openEditorsView.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -544,16 +544,16 @@ class OpenEditorRenderer implements IRenderer<OpenEditor, IOpenEditorTemplateDat
544544
editorTemplate.toDispose = [];
545545

546546
editorTemplate.toDispose.push(dom.addDisposableListener(container, dom.EventType.DRAG_START, (e: DragEvent) => {
547+
const dragged = <OpenEditor[]>this.getSelectedElements().filter(e => e instanceof OpenEditor && !!e.getResource());
547548

548549
const dragImage = document.createElement('div');
549550
e.dataTransfer.effectAllowed = 'copyMove';
550551
dragImage.className = 'monaco-tree-drag-image';
551-
dragImage.textContent = editorTemplate.openEditor.editor.getName();
552+
dragImage.textContent = dragged.length === 1 ? editorTemplate.openEditor.editor.getName() : String(dragged.length);
552553
document.body.appendChild(dragImage);
553554
e.dataTransfer.setDragImage(dragImage, -10, -10);
554555
setTimeout(() => document.body.removeChild(dragImage), 0);
555556

556-
const dragged = <OpenEditor[]>this.getSelectedElements().filter(e => e instanceof OpenEditor && !!e.getResource());
557557
this.transfer.setData(dragged, OpenEditor.prototype);
558558

559559
if (editorTemplate.openEditor && editorTemplate.openEditor.editor) {

0 commit comments

Comments
 (0)