Skip to content

Commit 1e89bd3

Browse files
committed
microsoft#30120 Feedback
1 parent 579a586 commit 1e89bd3

2 files changed

Lines changed: 16 additions & 6 deletions

File tree

src/vs/base/browser/ui/splitview/splitview.ts

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@ export interface IView extends ee.IEventEmitter {
4949
fixedSize: number;
5050
minimumSize: number;
5151
maximumSize: number;
52-
draggableElement: HTMLElement;
52+
draggableElement?: HTMLElement;
53+
draggableLabel?: string;
5354
render(container: HTMLElement, orientation: Orientation): void;
5455
layout(size: number, orientation: Orientation): void;
5556
focus(): void;
@@ -72,7 +73,6 @@ export abstract class View extends ee.EventEmitter implements IView {
7273
protected _sizing: ViewSizing;
7374
protected _fixedSize: number;
7475
protected _minimumSize: number;
75-
protected _draggableElement: HTMLElement = null;
7676

7777
constructor(opts: IViewOptions) {
7878
super();
@@ -87,7 +87,6 @@ export abstract class View extends ee.EventEmitter implements IView {
8787
get fixedSize(): number { return this._fixedSize; }
8888
get minimumSize(): number { return this.sizing === ViewSizing.Fixed ? this.fixedSize : this._minimumSize; }
8989
get maximumSize(): number { return this.sizing === ViewSizing.Fixed ? this.fixedSize : Number.POSITIVE_INFINITY; }
90-
get draggableElement(): HTMLElement { return this._draggableElement; }
9190

9291
protected setFlexible(size?: number): void {
9392
this._sizing = ViewSizing.Flexible;
@@ -166,10 +165,11 @@ export abstract class HeaderView extends View {
166165
}
167166
}
168167

168+
get draggableElement(): HTMLElement { return this.header; }
169+
169170
render(container: HTMLElement, orientation: Orientation): void {
170171
this.header = document.createElement('div');
171172
this.header.className = 'header';
172-
this._draggableElement = this.header;
173173

174174
let headerSize = this.headerSize + 'px';
175175

@@ -596,7 +596,7 @@ export class SplitView extends lifecycle.Disposable implements
596596
}
597597

598598
// Listen to Drag and Drop
599-
this.viewDnDListeners[index] = this.listenToDragAndDrop(view, viewElement);
599+
this.viewDnDListeners[index] = this.createDnDListeners(view, viewElement);
600600

601601
// Add sash
602602
if (this.views.length > 2) {
@@ -698,7 +698,7 @@ export class SplitView extends lifecycle.Disposable implements
698698
this.dropBackground = styles.dropBackground;
699699
}
700700

701-
private listenToDragAndDrop(view: IView, viewElement: HTMLElement): lifecycle.IDisposable[] {
701+
private createDnDListeners(view: IView, viewElement: HTMLElement): lifecycle.IDisposable[] {
702702
if (!this.canDragAndDrop || view instanceof VoidView) {
703703
return [];
704704
}
@@ -710,6 +710,14 @@ export class SplitView extends lifecycle.Disposable implements
710710
view.draggableElement.draggable = true;
711711
disposables.push(dom.addDisposableListener(view.draggableElement, dom.EventType.DRAG_START, (e: DragEvent) => {
712712
e.dataTransfer.effectAllowed = 'move';
713+
714+
const dragImage = document.createElement('div');
715+
dragImage.className = 'monaco-tree-drag-image';
716+
dragImage.textContent = view.draggableLabel ? view.draggableLabel : view.draggableElement.textContent;
717+
document.body.appendChild(dragImage);
718+
e.dataTransfer.setDragImage(dragImage, -10, -10);
719+
setTimeout(() => document.body.removeChild(dragImage), 0);
720+
713721
this.draggedView = view;
714722
}));
715723
}

src/vs/workbench/parts/views/browser/views.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,8 @@ export abstract class CollapsibleView extends AbstractCollapsibleView implements
139139
super.changeState(state);
140140
}
141141

142+
get draggableLabel(): string { return this.name; }
143+
142144
public create(): TPromise<void> {
143145
return TPromise.as(null);
144146
}

0 commit comments

Comments
 (0)