From 14b384f2cc5e53be3114a74f8903c01a0089d31a Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Fri, 14 Jun 2019 11:12:53 +0200 Subject: [PATCH] :lipstick: suggest widget dispose --- .../editor/contrib/suggest/suggestWidget.ts | 63 +++++++------------ 1 file changed, 22 insertions(+), 41 deletions(-) diff --git a/src/vs/editor/contrib/suggest/suggestWidget.ts b/src/vs/editor/contrib/suggest/suggestWidget.ts index 0c0fbb66f0a..8b9e470db98 100644 --- a/src/vs/editor/contrib/suggest/suggestWidget.ts +++ b/src/vs/editor/contrib/suggest/suggestWidget.ts @@ -9,7 +9,7 @@ import { createMatches } from 'vs/base/common/filters'; import * as strings from 'vs/base/common/strings'; import { Event, Emitter } from 'vs/base/common/event'; import { onUnexpectedError } from 'vs/base/common/errors'; -import { IDisposable, dispose, toDisposable, DisposableStore } from 'vs/base/common/lifecycle'; +import { IDisposable, dispose, toDisposable, DisposableStore, Disposable } from 'vs/base/common/lifecycle'; import { addClass, append, $, hide, removeClass, show, toggleClass, getDomNodePagePosition, hasClass, addDisposableListener } from 'vs/base/browser/dom'; import { IListVirtualDelegate, IListEvent, IListRenderer, IListMouseEvent } from 'vs/base/browser/ui/list/list'; import { List } from 'vs/base/browser/ui/list/listWidget'; @@ -29,7 +29,7 @@ import { IStorageService, StorageScope } from 'vs/platform/storage/common/storag import { MarkdownRenderer } from 'vs/editor/contrib/markdown/markdownRenderer'; import { IModeService } from 'vs/editor/common/services/modeService'; import { IOpenerService } from 'vs/platform/opener/common/opener'; -import { TimeoutTimer, CancelablePromise, createCancelablePromise } from 'vs/base/common/async'; +import { TimeoutTimer, CancelablePromise, createCancelablePromise, disposableTimeout } from 'vs/base/common/async'; import { CompletionItemKind, completionKindToCssClass } from 'vs/editor/common/modes'; import { IconLabel, IIconLabelValueOptions } from 'vs/base/browser/ui/iconLabel/iconLabel'; import { getIconClasses } from 'vs/editor/common/services/getIconClasses'; @@ -405,7 +405,7 @@ export class SuggestWidget implements IContentWidget, IListVirtualDelegate | null; private focusedItem: CompletionItem | null; private ignoreFocusEvents = false; @@ -423,7 +423,7 @@ export class SuggestWidget implements IContentWidget, IListVirtualDelegate(); private onDidFocusEmitter = new Emitter(); @@ -466,7 +466,7 @@ export class SuggestWidget implements IContentWidget, IListVirtualDelegate { + this.toDispose.add(addDisposableListener(this.element, 'click', e => { if (e.target === this.element) { this.hideWidget(); } @@ -487,19 +487,18 @@ export class SuggestWidget implements IContentWidget, IListVirtualDelegate this.onThemeChange(t)), - editor.onDidLayoutChange(() => this.onEditorLayoutChange()), - this.list.onMouseDown(e => this.onListMouseDown(e)), - this.list.onSelectionChange(e => this.onListSelection(e)), - this.list.onFocusChange(e => this.onListFocus(e)), - this.editor.onDidChangeCursorSelection(() => this.onCursorSelectionChanged()), - this.editor.onDidChangeConfiguration(e => e.contribInfo && applyIconStyle()) - ); + this.toDispose.add(attachListStyler(this.list, themeService, { + listInactiveFocusBackground: editorSuggestWidgetSelectedBackground, + listInactiveFocusOutline: activeContrastBorder + })); + this.toDispose.add(themeService.onThemeChange(t => this.onThemeChange(t))); + this.toDispose.add(editor.onDidLayoutChange(() => this.onEditorLayoutChange())); + this.toDispose.add(this.list.onMouseDown(e => this.onListMouseDown(e))); + this.toDispose.add(this.list.onSelectionChange(e => this.onListSelection(e))); + this.toDispose.add(this.list.onFocusChange(e => this.onListFocus(e))); + this.toDispose.add(this.editor.onDidChangeCursorSelection(() => this.onCursorSelectionChanged())); + this.toDispose.add(this.editor.onDidChangeConfiguration(e => e.contribInfo && applyIconStyle())); + this.suggestWidgetVisible = SuggestContext.Visible.bindTo(contextKeyService); this.suggestWidgetMultipleSuggestions = SuggestContext.MultipleSuggestions.bindTo(contextKeyService); @@ -725,10 +724,7 @@ export class SuggestWidget implements IContentWidget, IListVirtualDelegate { - this.loadingTimeout = null; - this.setState(State.Loading); - }, delay); + this.loadingTimeout = disposableTimeout(() => this.setState(State.Loading), delay); } } @@ -736,10 +732,7 @@ export class SuggestWidget implements IContentWidget, IListVirtualDelegate