Skip to content

Commit 09ed1c7

Browse files
committed
Synchronize refreshes to custom view tree in the renderer
Fixes microsoft#90082
1 parent 344f1a1 commit 09ed1c7

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,8 @@ export class CustomTreeView extends Disposable implements ITreeView {
151151
private readonly _onDidChangeTitle: Emitter<string> = this._register(new Emitter<string>());
152152
readonly onDidChangeTitle: Event<string> = this._onDidChangeTitle.event;
153153

154+
private readonly _onDidCompleteRefresh: Emitter<void> = this._register(new Emitter<void>());
155+
154156
constructor(
155157
private id: string,
156158
private _title: string,
@@ -500,8 +502,11 @@ export class CustomTreeView extends Disposable implements ITreeView {
500502
return 0;
501503
}
502504

503-
refresh(elements?: ITreeItem[]): Promise<void> {
505+
async refresh(elements?: ITreeItem[]): Promise<void> {
504506
if (this.dataProvider && this.tree) {
507+
if (this.refreshing) {
508+
await Event.toPromise(this._onDidCompleteRefresh.event);
509+
}
505510
if (!elements) {
506511
elements = [this.root];
507512
// remove all waiting elements to refresh if root is asked to refresh
@@ -526,7 +531,7 @@ export class CustomTreeView extends Disposable implements ITreeView {
526531
}
527532
}
528533
}
529-
return Promise.resolve(undefined);
534+
return undefined;
530535
}
531536

532537
async expand(itemOrItems: ITreeItem | ITreeItem[]): Promise<void> {
@@ -578,6 +583,7 @@ export class CustomTreeView extends Disposable implements ITreeView {
578583
this.refreshing = true;
579584
await Promise.all(elements.map(element => tree.updateChildren(element, true, true)));
580585
this.refreshing = false;
586+
this._onDidCompleteRefresh.fire();
581587
this.updateContentAreas();
582588
if (this.focused) {
583589
this.focus(false);

0 commit comments

Comments
 (0)