Skip to content

Commit 2a893be

Browse files
committed
Fix custom tree dnd now that tree is created later
1 parent 08978e0 commit 2a893be

File tree

1 file changed

+20
-3
lines changed

1 file changed

+20
-3
lines changed

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

+20-3
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ abstract class AbstractTreeView extends Disposable implements ITreeView {
162162
private messageElement!: HTMLDivElement;
163163
private tree: Tree | undefined;
164164
private treeLabels: ResourceLabels | undefined;
165+
private treeViewDnd: CustomTreeViewDragAndDrop;
165166

166167
private root: ITreeItem;
167168
private elementsToRefresh: ITreeItem[] = [];
@@ -215,6 +216,7 @@ abstract class AbstractTreeView extends Disposable implements ITreeView {
215216
this.collapseAllToggleContext = this.collapseAllToggleContextKey.bindTo(contextKeyService);
216217
this.refreshContextKey = new RawContextKey<boolean>(`treeView.${this.id}.enableRefresh`, false, localize('treeView.enableRefresh', "Whether the tree view with id {0} enables refresh.", this.id));
217218
this.refreshContext = this.refreshContextKey.bindTo(contextKeyService);
219+
this.treeViewDnd = this.instantiationService.createInstance(CustomTreeViewDragAndDrop);
218220

219221
this._register(this.themeService.onDidFileIconThemeChange(() => this.doRefresh([this.root]) /** soft refresh **/));
220222
this._register(this.themeService.onDidColorThemeChange(() => this.doRefresh([this.root]) /** soft refresh **/));
@@ -246,6 +248,7 @@ abstract class AbstractTreeView extends Disposable implements ITreeView {
246248
}
247249
set dragAndDropController(dnd: ITreeViewDragAndDropController | undefined) {
248250
this._dragAndDropController = dnd;
251+
this.treeViewDnd.controller = dnd;
249252
}
250253

251254
private _dataProvider: ITreeViewDataProvider | undefined;
@@ -519,7 +522,7 @@ abstract class AbstractTreeView extends Disposable implements ITreeView {
519522
return e.collapsibleState !== TreeItemCollapsibleState.Expanded;
520523
},
521524
multipleSelectionSupport: this.canSelectMany,
522-
dnd: this.dragAndDropController ? this.instantiationService.createInstance(CustomTreeViewDragAndDrop, this.dragAndDropController) : undefined,
525+
dnd: this.treeViewDnd,
523526
overrideStyles: {
524527
listBackground: this.viewLocation === ViewContainerLocation.Sidebar ? SIDE_BAR_BACKGROUND : PANEL_BACKGROUND
525528
}
@@ -1208,17 +1211,31 @@ export class TreeView extends AbstractTreeView {
12081211
}
12091212

12101213
export class CustomTreeViewDragAndDrop implements ITreeDragAndDrop<ITreeItem> {
1211-
constructor(private dndController: ITreeViewDragAndDropController, @ILabelService private readonly labelService: ILabelService) { }
1214+
constructor(@ILabelService private readonly labelService: ILabelService) { }
1215+
1216+
private dndController: ITreeViewDragAndDropController | undefined;
1217+
set controller(controller: ITreeViewDragAndDropController | undefined) {
1218+
this.dndController = controller;
1219+
}
12121220

12131221
onDragOver(data: IDragAndDropData, targetElement: ITreeItem, targetIndex: number, originalEvent: DragEvent): boolean | ITreeDragOverReaction {
1222+
if (!this.dndController) {
1223+
return false;
1224+
}
12141225
return { accept: true, bubble: TreeDragOverBubble.Down, autoExpand: true };
12151226
}
12161227

12171228
getDragURI(element: ITreeItem): string | null {
1229+
if (!this.dndController) {
1230+
return null;
1231+
}
12181232
return element.resourceUri ? URI.revive(element.resourceUri).toString() : element.handle;
12191233
}
12201234

12211235
getDragLabel?(elements: ITreeItem[]): string | undefined {
1236+
if (!this.dndController) {
1237+
return undefined;
1238+
}
12221239
if (elements.length > 1) {
12231240
return String(elements.length);
12241241
}
@@ -1230,7 +1247,7 @@ export class CustomTreeViewDragAndDrop implements ITreeDragAndDrop<ITreeItem> {
12301247
if (data instanceof ElementsDragAndDropData) {
12311248
const elements = data.elements;
12321249
if (targetNode) {
1233-
await this.dndController.onDrop(elements, targetNode);
1250+
await this.dndController?.onDrop(elements, targetNode);
12341251
}
12351252
}
12361253
}

0 commit comments

Comments
 (0)