33 * @license MIT
44 */
55
6- import type { Terminal , ITerminalAddon } from '@xterm/xterm' ;
6+ import type { Terminal , ITerminalAddon , IDisposable } from '@xterm/xterm' ;
77import type { ProgressAddon as IProgressApi , IProgress } from '@xterm/addon-progress' ;
8- import { Emitter } from 'vs/base/common/event' ;
9- import { Disposable } from 'vs/base/common/lifecycle' ;
8+ import type { Emitter , Event } from 'vs/base/common/event' ;
109
1110
1211export const enum ProgressState {
@@ -34,14 +33,20 @@ function toInt(s: string): number {
3433}
3534
3635
37- export class ProgressAddon extends Disposable implements ITerminalAddon , IProgressApi {
36+ export class ProgressAddon implements ITerminalAddon , IProgressApi {
37+ private _seqHandler : IDisposable | undefined ;
3838 private _st : ProgressState = ProgressState . REMOVE ;
3939 private _pr = 0 ;
40- private readonly _onChange = this . _register ( new Emitter < IProgress > ( ) ) ;
41- public readonly onChange = this . _onChange . event ;
40+ private _onChange : Emitter < IProgress > | undefined ;
41+ public onChange : Event < IProgress > | undefined ;
42+
43+ public dispose ( ) : void {
44+ this . _seqHandler ?. dispose ( ) ;
45+ this . _onChange ?. dispose ( ) ;
46+ }
4247
4348 public activate ( terminal : Terminal ) : void {
44- this . _register ( terminal . parser . registerOscHandler ( 9 , data => {
49+ this . _seqHandler = terminal . parser . registerOscHandler ( 9 , data => {
4550 if ( ! data . startsWith ( '4;' ) ) {
4651 return false ;
4752 }
@@ -74,7 +79,10 @@ export class ProgressAddon extends Disposable implements ITerminalAddon, IProgre
7479 break ;
7580 }
7681 return true ;
77- } ) ) ;
82+ } ) ;
83+ // FIXME: borrow emitter ctor from xterm, to be changed once #5283 is resolved
84+ this . _onChange = new ( terminal as any ) . _core . _onData . constructor ( ) ;
85+ this . onChange = this . _onChange ! . event ;
7886 }
7987
8088 public get progress ( ) : IProgress {
@@ -88,6 +96,6 @@ export class ProgressAddon extends Disposable implements ITerminalAddon, IProgre
8896 }
8997 this . _st = progress . state ;
9098 this . _pr = Math . min ( Math . max ( progress . value , 0 ) , 100 ) ;
91- this . _onChange . fire ( { state : this . _st , value : this . _pr } ) ;
99+ this . _onChange ? .fire ( { state : this . _st , value : this . _pr } ) ;
92100 }
93101}
0 commit comments