diff --git a/src/vs/workbench/browser/parts/views/customView.ts b/src/vs/workbench/browser/parts/views/customView.ts index c573df84e12a067476c6482ecc229419c11548e5..4967df2099ef5b74407203b9b33f5ea46b197ab6 100644 --- a/src/vs/workbench/browser/parts/views/customView.ts +++ b/src/vs/workbench/browser/parts/views/customView.ts @@ -151,6 +151,8 @@ export class CustomTreeView extends Disposable implements ITreeView { private readonly _onDidChangeTitle: Emitter = this._register(new Emitter()); readonly onDidChangeTitle: Event = this._onDidChangeTitle.event; + private readonly _onDidCompleteRefresh: Emitter = this._register(new Emitter()); + constructor( private id: string, private _title: string, @@ -500,8 +502,11 @@ export class CustomTreeView extends Disposable implements ITreeView { return 0; } - refresh(elements?: ITreeItem[]): Promise { + async refresh(elements?: ITreeItem[]): Promise { if (this.dataProvider && this.tree) { + if (this.refreshing) { + await Event.toPromise(this._onDidCompleteRefresh.event); + } if (!elements) { elements = [this.root]; // remove all waiting elements to refresh if root is asked to refresh @@ -526,7 +531,7 @@ export class CustomTreeView extends Disposable implements ITreeView { } } } - return Promise.resolve(undefined); + return undefined; } async expand(itemOrItems: ITreeItem | ITreeItem[]): Promise { @@ -578,6 +583,7 @@ export class CustomTreeView extends Disposable implements ITreeView { this.refreshing = true; await Promise.all(elements.map(element => tree.updateChildren(element, true, true))); this.refreshing = false; + this._onDidCompleteRefresh.fire(); this.updateContentAreas(); if (this.focused) { this.focus(false);