Skip to content

Commit 00fa27e

Browse files
authored
use TimeoutTimer to properly cancel timeout for suggest widget discoverability update (microsoft#253497)
fix microsoft#253460
1 parent d650719 commit 00fa27e

File tree

2 files changed

+15
-4
lines changed

2 files changed

+15
-4
lines changed

src/vs/workbench/contrib/terminalContrib/suggest/browser/terminalSuggestAddon.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -907,6 +907,7 @@ export class SuggestAddon extends Disposable implements ITerminalAddon, ISuggest
907907
}
908908

909909
hideSuggestWidget(cancelAnyRequest: boolean): void {
910+
this._discoverability?.resetTimer();
910911
if (cancelAnyRequest) {
911912
this._cancellationTokenSource?.cancel();
912913
this._cancellationTokenSource = undefined;

src/vs/workbench/contrib/terminalContrib/suggest/browser/terminalSuggestShownTracker.ts

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6+
import { TimeoutTimer } from '../../../../../base/common/async.js';
67
import { Disposable, IDisposable } from '../../../../../base/common/lifecycle.js';
78
import { IStorageService, StorageScope, StorageTarget } from '../../../../../platform/storage/common/storage.js';
89
import { TerminalShellType } from '../../../../../platform/terminal/common/terminal.js';
@@ -23,7 +24,7 @@ interface ITerminalSuggestShownTracker extends IDisposable {
2324
export class TerminalSuggestShownTracker extends Disposable implements ITerminalSuggestShownTracker {
2425
private _done: boolean;
2526
private _count: number;
26-
private _timeout: Timeout | undefined;
27+
private _timeout: TimeoutTimer | undefined;
2728
private _start: number | undefined;
2829

2930
private _firstShownTracker: { shell: Set<TerminalShellType>; window: boolean } | undefined = undefined;
@@ -51,6 +52,14 @@ export class TerminalSuggestShownTracker extends Disposable implements ITerminal
5152
this._firstShownTracker = undefined;
5253
}
5354

55+
resetTimer(): void {
56+
if (this._timeout) {
57+
this._timeout.cancel();
58+
this._timeout = undefined;
59+
}
60+
this._start = undefined;
61+
}
62+
5463
update(widgetElt: HTMLElement | undefined): void {
5564
if (this._done) {
5665
return;
@@ -63,10 +72,11 @@ export class TerminalSuggestShownTracker extends Disposable implements ITerminal
6372
if (this._count >= TERMINAL_SUGGEST_DISCOVERABILITY_MAX_COUNT) {
6473
this._setDone(widgetElt);
6574
} else if (!this._start) {
75+
this.resetTimer();
6676
this._start = Date.now();
67-
this._timeout = setTimeout(() => {
77+
this._timeout = this._register(new TimeoutTimer(() => {
6878
this._setDone(widgetElt);
69-
}, TERMINAL_SUGGEST_DISCOVERABILITY_MIN_MS);
79+
}, TERMINAL_SUGGEST_DISCOVERABILITY_MIN_MS));
7080
}
7181
}
7282

@@ -77,7 +87,7 @@ export class TerminalSuggestShownTracker extends Disposable implements ITerminal
7787
widgetElt.classList.remove('increased-discoverability');
7888
}
7989
if (this._timeout) {
80-
clearTimeout(this._timeout);
90+
this._timeout.cancel();
8191
this._timeout = undefined;
8292
}
8393
this._start = undefined;

0 commit comments

Comments
 (0)