diff --git a/src/vs/editor/contrib/suggest/browser/suggestWidget.ts b/src/vs/editor/contrib/suggest/browser/suggestWidget.ts index 43e4a5745366b4dd4587c37f46f4fbb12546d103..0fafd178fc456c4a91f87c14a3e1d794a7a58460 100644 --- a/src/vs/editor/contrib/suggest/browser/suggestWidget.ts +++ b/src/vs/editor/contrib/suggest/browser/suggestWidget.ts @@ -265,6 +265,8 @@ export class SuggestWidget implements IContentWidget, IDisposable { private delegate: IDelegate; private list: List; + private editorBlurTimeout: TPromise; + private showTimeout: TPromise; private toDispose: IDisposable[]; private _onDidVisibilityChange: Emitter = new Emitter(); @@ -330,7 +332,7 @@ export class SuggestWidget implements IContentWidget, IDisposable { } private onEditorBlur(): void { - TPromise.timeout(150).done(() => { + this.editorBlurTimeout = TPromise.timeout(150).then(() => { if (!this.editor.isFocused()) { this.setState(State.Hidden); } @@ -656,7 +658,7 @@ export class SuggestWidget implements IContentWidget, IDisposable { this.updateWidgetHeight(); this._onDidVisibilityChange.fire(true); this.renderDetails(); - TPromise.timeout(100).done(() => { + this.showTimeout = TPromise.timeout(100).then(() => { addClass(this.element, 'visible'); }); } @@ -747,5 +749,17 @@ export class SuggestWidget implements IContentWidget, IDisposable { this.toDispose = disposeAll(this.toDispose); this._onDidVisibilityChange.dispose(); this._onDidVisibilityChange = null; + clearTimeout(this.loadingTimeout); + this.loadingTimeout = null; + + if (this.editorBlurTimeout) { + this.editorBlurTimeout.cancel(); + this.editorBlurTimeout = null; + } + + if (this.showTimeout) { + this.showTimeout.cancel(); + this.showTimeout = null; + } } }