diff --git a/src/vs/base/browser/ui/list/listPaging.ts b/src/vs/base/browser/ui/list/listPaging.ts index d883cc421bd3..5955300a6eab 100644 --- a/src/vs/base/browser/ui/list/listPaging.ts +++ b/src/vs/base/browser/ui/list/listPaging.ts @@ -97,6 +97,10 @@ export class PagedList implements IDisposable { return this.list; } + get onDidDispose(): Event { + return this.list.onDidDispose; + } + get onFocusChange(): Event> { return mapEvent(this.list.onFocusChange, ({ elements, indexes }) => ({ elements: elements.map(e => this._model.get(e)), indexes })); } @@ -193,4 +197,4 @@ export class PagedList implements IDisposable { dispose(): void { this.list.dispose(); } -} \ No newline at end of file +} diff --git a/src/vs/base/browser/ui/list/listWidget.ts b/src/vs/base/browser/ui/list/listWidget.ts index 4277662548da..b4232c778dd4 100644 --- a/src/vs/base/browser/ui/list/listWidget.ts +++ b/src/vs/base/browser/ui/list/listWidget.ts @@ -1059,7 +1059,7 @@ export class List implements ISpliceable, IDisposable { } isDOMFocused(): boolean { - return this.view && this.view.domNode === document.activeElement; + return this.view.domNode === document.activeElement; } getHTMLElement(): HTMLElement { diff --git a/src/vs/base/parts/tree/browser/treeImpl.ts b/src/vs/base/parts/tree/browser/treeImpl.ts index eea9ff87554e..f7c9173df5a2 100644 --- a/src/vs/base/parts/tree/browser/treeImpl.ts +++ b/src/vs/base/parts/tree/browser/treeImpl.ts @@ -131,7 +131,7 @@ export class Tree implements _.ITree { } public isDOMFocused(): boolean { - return this.view && this.view.isFocused(); + return this.view.isFocused(); } public domBlur(): void { diff --git a/src/vs/platform/list/browser/listService.ts b/src/vs/platform/list/browser/listService.ts index d230f82981dc..c3982e98716e 100644 --- a/src/vs/platform/list/browser/listService.ts +++ b/src/vs/platform/list/browser/listService.ts @@ -73,7 +73,13 @@ export class ListService implements IListService { const result = combinedDisposable([ widget.onDidFocus(() => this._lastFocusedWidget = widget), - toDisposable(() => this.lists.splice(this.lists.indexOf(registeredList), 1)) + toDisposable(() => this.lists.splice(this.lists.indexOf(registeredList), 1)), + widget.onDidDispose(() => { + this.lists = this.lists.filter(l => l !== registeredList); + if (this._lastFocusedWidget === widget) { + this._lastFocusedWidget = undefined; + } + }) ]); return result;