mirror of
https://github.com/microsoft/vscode.git
synced 2026-07-10 16:58:55 -05:00
DND: allow to copy a tab to a new group instead of moving
This commit is contained in:
@@ -13,9 +13,10 @@ import {prepareActions} from 'vs/workbench/browser/actionBarRegistry';
|
||||
import arrays = require('vs/base/common/arrays');
|
||||
import errors = require('vs/base/common/errors');
|
||||
import DOM = require('vs/base/browser/dom');
|
||||
import {isMacintosh} from 'vs/base/common/platform';
|
||||
import {Builder, $} from 'vs/base/browser/builder';
|
||||
import {MIME_BINARY} from 'vs/base/common/mime';
|
||||
import {IEditorGroup, IEditorIdentifier, asFileEditorInput} from 'vs/workbench/common/editor';
|
||||
import {IEditorGroup, IEditorIdentifier, asFileEditorInput, EditorOptions} from 'vs/workbench/common/editor';
|
||||
import {ToolBar} from 'vs/base/browser/ui/toolbar/toolbar';
|
||||
import {StandardKeyboardEvent} from 'vs/base/browser/keyboardEvent';
|
||||
import {CommonKeybindings} from 'vs/base/common/keyCodes';
|
||||
@@ -126,9 +127,17 @@ export class TabsTitleControl extends TitleControl {
|
||||
|
||||
const sourcePosition = this.stacks.positionOfGroup(TabsTitleControl.draggedEditor.group);
|
||||
const targetPosition = this.stacks.positionOfGroup(group);
|
||||
const targetIndex = group.count;
|
||||
|
||||
// Move editor to target position at the end
|
||||
this.editorGroupService.moveEditor(TabsTitleControl.draggedEditor.editor, sourcePosition, targetPosition, group.count);
|
||||
// Move editor to target position and index
|
||||
if (this.isMoveOperation(e, TabsTitleControl.draggedEditor.group, group)) {
|
||||
this.editorGroupService.moveEditor(TabsTitleControl.draggedEditor.editor, sourcePosition, targetPosition, targetIndex);
|
||||
}
|
||||
|
||||
// Copy: just open editor at target index
|
||||
else {
|
||||
this.editorService.openEditor(TabsTitleControl.draggedEditor.editor, EditorOptions.create({ pinned: true, index: targetIndex }), targetPosition).done(null, errors.onUnexpectedError);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -387,7 +396,7 @@ export class TabsTitleControl extends TitleControl {
|
||||
this.tabDisposeables.push(DOM.addDisposableListener(tab, DOM.EventType.DRAG_START, (e: DragEvent) => {
|
||||
DOM.addClass(tab, 'dragged');
|
||||
TabsTitleControl.draggedEditor = { editor, group };
|
||||
e.dataTransfer.effectAllowed = 'move';
|
||||
e.dataTransfer.effectAllowed = 'copyMove';
|
||||
|
||||
// Enable support to drag a file to desktop
|
||||
const fileInput = asFileEditorInput(editor, true);
|
||||
@@ -423,11 +432,24 @@ export class TabsTitleControl extends TitleControl {
|
||||
const targetIndex = group.indexOf(editor);
|
||||
|
||||
// Move editor to target position and index
|
||||
this.editorGroupService.moveEditor(TabsTitleControl.draggedEditor.editor, sourcePosition, targetPosition, targetIndex);
|
||||
if (this.isMoveOperation(e, TabsTitleControl.draggedEditor.group, group)) {
|
||||
this.editorGroupService.moveEditor(TabsTitleControl.draggedEditor.editor, sourcePosition, targetPosition, targetIndex);
|
||||
}
|
||||
|
||||
// Copy: just open editor at target index
|
||||
else {
|
||||
this.editorService.openEditor(TabsTitleControl.draggedEditor.editor, EditorOptions.create({ pinned: true, index: targetIndex }), targetPosition).done(null, errors.onUnexpectedError);
|
||||
}
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
private isMoveOperation(e: DragEvent, source: IEditorGroup, target: IEditorGroup) {
|
||||
const isCopy = (e.ctrlKey && !isMacintosh) || (e.altKey && isMacintosh);
|
||||
|
||||
return !isCopy || source.id === target.id;
|
||||
}
|
||||
|
||||
private getTabActions(identifier: IEditorIdentifier): IAction[] {
|
||||
const {editor, group} = identifier;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user