提交 c21cb36c 编写于 作者: B Benjamin Pasero

DND: allow to copy a tab to a new group instead of moving

上级 62faf655
......@@ -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;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册