@@ -24,6 +24,7 @@ export abstract class GWebviewView implements WebviewViewProvider, Disposable {
2424 protected readonly _disposables : Disposable [ ] = [ ] ;
2525 protected _enabled : boolean | undefined ;
2626 private _view : WebviewView | undefined ;
27+ private _disposableView : Disposable | undefined ;
2728 private _title : string ;
2829
2930 constructor ( public readonly id : string , title : string ) {
@@ -34,6 +35,7 @@ export abstract class GWebviewView implements WebviewViewProvider, Disposable {
3435
3536 dispose ( ) {
3637 Disposable . from ( ...this . _disposables ) . dispose ( ) ;
38+ this . _disposableView ?. dispose ( ) ;
3739 }
3840
3941 isEnabled ( ) : boolean {
@@ -87,7 +89,11 @@ export abstract class GWebviewView implements WebviewViewProvider, Disposable {
8789 webviewView . webview . options = this . getWebviewOptions ( ) ;
8890 webviewView . title = this . title ;
8991
90- this . _disposables . push ( this . _view . webview . onDidReceiveMessage ( this . onMessageReceived , this ) ) ;
92+ this . _disposableView = Disposable . from (
93+ this . _view . onDidDispose ( this . onViewDisposed , this ) ,
94+ this . _view . onDidChangeVisibility ( this . onViewVisabilityChanged , this ) ,
95+ this . _view . webview . onDidReceiveMessage ( this . onMessageReceived , this ) ,
96+ ) ;
9197
9298 await this . refresh ( ) ;
9399 }
@@ -126,4 +132,18 @@ export abstract class GWebviewView implements WebviewViewProvider, Disposable {
126132 return Promise . resolve ( false ) ;
127133 }
128134 }
135+
136+ private onViewDisposed ( ) {
137+ this . _disposableView ?. dispose ( ) ;
138+ this . _disposableView = undefined ;
139+ this . _view = undefined ;
140+ }
141+
142+ private async onViewVisabilityChanged ( ) {
143+ const visable = this . visible ;
144+
145+ if ( visable ) {
146+ await this . refresh ( ) ;
147+ }
148+ }
129149}
0 commit comments