diff --git a/src/vs/platform/quickinput/browser/quickInputTree.ts b/src/vs/platform/quickinput/browser/quickInputTree.ts index 8016a9dff3441..2c13515616ad8 100644 --- a/src/vs/platform/quickinput/browser/quickInputTree.ts +++ b/src/vs/platform/quickinput/browser/quickInputTree.ts @@ -7,7 +7,7 @@ import * as dom from 'vs/base/browser/dom'; import { Emitter, Event } from 'vs/base/common/event'; import { IHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegate'; import { IListVirtualDelegate } from 'vs/base/browser/ui/list/list'; -import { IObjectTreeElement, ITreeNode, ITreeRenderer } from 'vs/base/browser/ui/tree/tree'; +import { IObjectTreeElement, ITreeEvent, ITreeNode, ITreeRenderer } from 'vs/base/browser/ui/tree/tree'; import { localize } from 'vs/nls'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { WorkbenchObjectTree } from 'vs/platform/list/browser/listService'; @@ -696,6 +696,8 @@ export class QuickInputTree extends Disposable { private readonly _onSeparatorButtonTriggered = new Emitter(); onSeparatorButtonTriggered = this._onSeparatorButtonTriggered.event; + private readonly _onTriggerEmptySelectionOrFocus = new Emitter>(); + private readonly _container: HTMLElement; private readonly _tree: WorkbenchObjectTree; private readonly _separatorRenderer: QuickPickSeparatorElementRenderer; @@ -748,7 +750,7 @@ export class QuickInputTree extends Disposable { ?? element.separator?.id ?? element.separator?.label ?? ''; - } + }, }, alwaysConsumeMouseWheel: true } @@ -762,7 +764,7 @@ export class QuickInputTree extends Disposable { @memoize get onDidChangeFocus() { return Event.map( - this._tree.onDidChangeFocus, + Event.any(this._tree.onDidChangeFocus, this._onTriggerEmptySelectionOrFocus.event), e => e.elements.filter((e): e is QuickPickItemElement => e instanceof QuickPickItemElement).map(e => e.item) ); } @@ -770,7 +772,7 @@ export class QuickInputTree extends Disposable { @memoize get onDidChangeSelection() { return Event.map( - this._tree.onDidChangeSelection, + Event.any(this._tree.onDidChangeSelection, this._onTriggerEmptySelectionOrFocus.event), e => ({ items: e.elements.filter((e): e is QuickPickItemElement => e instanceof QuickPickItemElement).map(e => e.item), event: e.browserEvent @@ -1504,7 +1506,15 @@ export class QuickInputTree extends Disposable { }); } } + const before = this._tree.getFocus().length; this._tree.setChildren(null, elements); + // Temporary fix until we figure out why the tree doesn't fire an event when focus & selection + // get changed to empty arrays. + if (before > 0 && elements.length === 0) { + this._onTriggerEmptySelectionOrFocus.fire({ + elements: [] + }); + } this._tree.layout(); this._onChangedAllVisibleChecked.fire(this.getAllVisibleChecked());