Skip to content

Commit c51d244

Browse files
committed
listService: forget about disposed lists
1 parent ce74536 commit c51d244

4 files changed

Lines changed: 14 additions & 4 deletions

File tree

src/vs/base/browser/ui/list/listPaging.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,10 @@ export class PagedList<T> implements IDisposable {
9797
return this.list;
9898
}
9999

100+
get onDidDispose(): Event<void> {
101+
return this.list.onDidDispose;
102+
}
103+
100104
get onFocusChange(): Event<IListEvent<T>> {
101105
return mapEvent(this.list.onFocusChange, ({ elements, indexes }) => ({ elements: elements.map(e => this._model.get(e)), indexes }));
102106
}
@@ -193,4 +197,4 @@ export class PagedList<T> implements IDisposable {
193197
dispose(): void {
194198
this.list.dispose();
195199
}
196-
}
200+
}

src/vs/base/browser/ui/list/listWidget.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1059,7 +1059,7 @@ export class List<T> implements ISpliceable<T>, IDisposable {
10591059
}
10601060

10611061
isDOMFocused(): boolean {
1062-
return this.view && this.view.domNode === document.activeElement;
1062+
return this.view.domNode === document.activeElement;
10631063
}
10641064

10651065
getHTMLElement(): HTMLElement {

src/vs/base/parts/tree/browser/treeImpl.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ export class Tree implements _.ITree {
131131
}
132132

133133
public isDOMFocused(): boolean {
134-
return this.view && this.view.isFocused();
134+
return this.view.isFocused();
135135
}
136136

137137
public domBlur(): void {

src/vs/platform/list/browser/listService.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,13 @@ export class ListService implements IListService {
7373

7474
const result = combinedDisposable([
7575
widget.onDidFocus(() => this._lastFocusedWidget = widget),
76-
toDisposable(() => this.lists.splice(this.lists.indexOf(registeredList), 1))
76+
toDisposable(() => this.lists.splice(this.lists.indexOf(registeredList), 1)),
77+
widget.onDidDispose(() => {
78+
this.lists = this.lists.filter(l => l !== registeredList);
79+
if (this._lastFocusedWidget === widget) {
80+
this._lastFocusedWidget = undefined;
81+
}
82+
})
7783
]);
7884

7985
return result;

0 commit comments

Comments
 (0)