Fix dragging a folder from the the explorer tree to terminal no longer copies folder path (#128419)
* Fixes #128283 * 🧹 some cleanup
This commit is contained in:
parent
4d4c5f80bf
commit
c093b78c9f
|
@ -56,9 +56,8 @@ import { IQuickInputService, IQuickPickItem, IQuickPickSeparator } from 'vs/plat
|
|||
import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService';
|
||||
import { isMacintosh, isWindows, OperatingSystem, OS } from 'vs/base/common/platform';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import { Schemas } from 'vs/base/common/network';
|
||||
import { DataTransfers } from 'vs/base/browser/dnd';
|
||||
import { containsDragType, DragAndDropObserver, IDragAndDropObserverCallbacks } from 'vs/workbench/browser/dnd';
|
||||
import { CodeDataTransfers, containsDragType, DragAndDropObserver, IDragAndDropObserverCallbacks } from 'vs/workbench/browser/dnd';
|
||||
import { getColorClass } from 'vs/workbench/contrib/terminal/browser/terminalIcon';
|
||||
import { IWorkbenchLayoutService, Position } from 'vs/workbench/services/layout/browser/layoutService';
|
||||
import { Orientation } from 'vs/base/browser/ui/sash/sash';
|
||||
|
@ -2024,7 +2023,7 @@ class TerminalInstanceDragAndDropController extends Disposable implements IDragA
|
|||
}
|
||||
|
||||
onDragEnter(e: DragEvent) {
|
||||
if (!containsDragType(e, DataTransfers.FILES, DataTransfers.RESOURCES, DataTransfers.TERMINALS)) {
|
||||
if (!containsDragType(e, DataTransfers.FILES, DataTransfers.RESOURCES, DataTransfers.TERMINALS, CodeDataTransfers.FILES)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -2085,17 +2084,17 @@ class TerminalInstanceDragAndDropController extends Disposable implements IDragA
|
|||
|
||||
// Check if files were dragged from the tree explorer
|
||||
let path: string | undefined;
|
||||
const resources = e.dataTransfer.getData(DataTransfers.RESOURCES);
|
||||
if (resources) {
|
||||
const uri = URI.parse(JSON.parse(resources)[0]);
|
||||
if (uri.scheme === Schemas.vscodeTerminal) {
|
||||
const side = this._getDropSide(e);
|
||||
this._onDropTerminal.fire({ uri, side });
|
||||
return;
|
||||
} else {
|
||||
path = uri.fsPath;
|
||||
}
|
||||
} else if (e.dataTransfer.files.length > 0 && e.dataTransfer.files[0].path /* Electron only */) {
|
||||
const rawResources = e.dataTransfer.getData(DataTransfers.RESOURCES);
|
||||
if (rawResources) {
|
||||
path = URI.parse(JSON.parse(rawResources)[0]).fsPath;
|
||||
}
|
||||
|
||||
const rawCodeFiles = e.dataTransfer.getData(CodeDataTransfers.FILES);
|
||||
if (!path && rawCodeFiles) {
|
||||
path = URI.file(JSON.parse(rawCodeFiles)[0]).fsPath;
|
||||
}
|
||||
|
||||
if (!path && e.dataTransfer.files.length > 0 && e.dataTransfer.files[0].path /* Electron only */) {
|
||||
// Check if the file was dragged from the filesystem
|
||||
path = URI.file(e.dataTransfer.files[0].path).fsPath;
|
||||
}
|
||||
|
|
|
@ -33,7 +33,6 @@ import { disposableTimeout } from 'vs/base/common/async';
|
|||
import { ElementsDragAndDropData, NativeDragAndDropData } from 'vs/base/browser/ui/list/listView';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import { getColorClass, getIconId, getUriClasses } from 'vs/workbench/contrib/terminal/browser/terminalIcon';
|
||||
import { Schemas } from 'vs/base/common/network';
|
||||
import { IEditableData } from 'vs/workbench/common/views';
|
||||
import { IContextViewService } from 'vs/platform/contextview/browser/contextView';
|
||||
import { InputBox, MessageType } from 'vs/base/browser/ui/inputbox/inputBox';
|
||||
|
@ -41,10 +40,9 @@ import { once } from 'vs/base/common/functional';
|
|||
import { attachInputBoxStyler } from 'vs/platform/theme/common/styler';
|
||||
import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent';
|
||||
import { KeyCode } from 'vs/base/common/keyCodes';
|
||||
import { containsDragType } from 'vs/workbench/browser/dnd';
|
||||
import { CodeDataTransfers, containsDragType } from 'vs/workbench/browser/dnd';
|
||||
import { terminalStrings } from 'vs/workbench/contrib/terminal/common/terminalStrings';
|
||||
import { ILifecycleService } from 'vs/workbench/services/lifecycle/common/lifecycle';
|
||||
import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace';
|
||||
import { IProcessDetails } from 'vs/platform/terminal/common/terminalProcess';
|
||||
import { TerminalContextKeys } from 'vs/workbench/contrib/terminal/common/terminalContextKey';
|
||||
import { getTerminalResourcesFromDragEvent, parseTerminalUri } from 'vs/workbench/contrib/terminal/browser/terminalUri';
|
||||
|
@ -545,16 +543,12 @@ class TerminalTabsDragAndDrop implements IListDragAndDrop<ITerminalInstance> {
|
|||
@ITerminalService private readonly _terminalService: ITerminalService,
|
||||
@ITerminalGroupService private readonly _terminalGroupService: ITerminalGroupService,
|
||||
@ITerminalInstanceService private readonly _terminalInstanceService: ITerminalInstanceService,
|
||||
@IWorkspaceContextService private readonly _workspaceContextService: IWorkspaceContextService
|
||||
) {
|
||||
this._offProcessTerminalService = _terminalService.getOffProcessTerminalService();
|
||||
}
|
||||
|
||||
getDragURI(instance: ITerminalInstance): string | null {
|
||||
return URI.from({
|
||||
scheme: Schemas.vscodeTerminal,
|
||||
path: `/${this._workspaceContextService.getWorkspace().id}/${instance.instanceId.toString()}`
|
||||
}).toString();
|
||||
return instance.resource.toString();
|
||||
}
|
||||
|
||||
getDragLabel?(elements: ITerminalInstance[], originalEvent: DragEvent): string | undefined {
|
||||
|
@ -579,13 +573,12 @@ class TerminalTabsDragAndDrop implements IListDragAndDrop<ITerminalInstance> {
|
|||
const terminals: ITerminalInstance[] = dndData.filter(e => 'instanceId' in (e as any));
|
||||
if (terminals.length > 0) {
|
||||
originalEvent.dataTransfer.setData(DataTransfers.TERMINALS, JSON.stringify(terminals.map(e => e.resource.toString())));
|
||||
originalEvent.dataTransfer.setData(DataTransfers.RESOURCES, JSON.stringify(terminals.map(e => e.resource.toString())));
|
||||
}
|
||||
}
|
||||
|
||||
onDragOver(data: IDragAndDropData, targetInstance: ITerminalInstance | undefined, targetIndex: number | undefined, originalEvent: DragEvent): boolean | IListDragOverReaction {
|
||||
if (data instanceof NativeDragAndDropData) {
|
||||
if (!containsDragType(originalEvent, DataTransfers.FILES, DataTransfers.RESOURCES, DataTransfers.TERMINALS)) {
|
||||
if (!containsDragType(originalEvent, DataTransfers.FILES, DataTransfers.RESOURCES, DataTransfers.TERMINALS, CodeDataTransfers.FILES)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -634,6 +627,9 @@ class TerminalTabsDragAndDrop implements IListDragAndDrop<ITerminalInstance> {
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (promises.length) {
|
||||
let processes = await Promise.all(promises);
|
||||
processes = processes.filter(p => p !== undefined);
|
||||
let lastInstance: ITerminalInstance | undefined;
|
||||
|
@ -687,10 +683,17 @@ class TerminalTabsDragAndDrop implements IListDragAndDrop<ITerminalInstance> {
|
|||
|
||||
// Check if files were dragged from the tree explorer
|
||||
let path: string | undefined;
|
||||
const resources = e.dataTransfer.getData(DataTransfers.RESOURCES);
|
||||
if (resources) {
|
||||
path = URI.parse(JSON.parse(resources)[0]).fsPath;
|
||||
} else if (e.dataTransfer.files.length > 0 && e.dataTransfer.files[0].path /* Electron only */) {
|
||||
const rawResources = e.dataTransfer.getData(DataTransfers.RESOURCES);
|
||||
if (rawResources) {
|
||||
path = URI.parse(JSON.parse(rawResources)[0]).fsPath;
|
||||
}
|
||||
|
||||
const rawCodeFiles = e.dataTransfer.getData(CodeDataTransfers.FILES);
|
||||
if (!path && rawCodeFiles) {
|
||||
path = URI.file(JSON.parse(rawCodeFiles)[0]).fsPath;
|
||||
}
|
||||
|
||||
if (!path && e.dataTransfer.files.length > 0 && e.dataTransfer.files[0].path /* Electron only */) {
|
||||
// Check if the file was dragged from the filesystem
|
||||
path = URI.file(e.dataTransfer.files[0].path).fsPath;
|
||||
}
|
||||
|
|
|
@ -494,7 +494,6 @@ class SingleTerminalTabActionViewItem extends MenuEntryActionViewItem {
|
|||
this._elementDisposables.push(dom.addDisposableListener(this.element, dom.EventType.DRAG_START, e => {
|
||||
const instance = this._terminalGroupService.activeInstance;
|
||||
if (e.dataTransfer && instance) {
|
||||
e.dataTransfer.setData(DataTransfers.RESOURCES, JSON.stringify([instance.resource.toString()]));
|
||||
e.dataTransfer.setData(DataTransfers.TERMINALS, JSON.stringify([instance.resource.toString()]));
|
||||
}
|
||||
}));
|
||||
|
|
Loading…
Reference in a new issue