Skip to content

Commit d72a49e

Browse files
committed
Added dispose/visability event handlers
1 parent 7e1e583 commit d72a49e

File tree

2 files changed

+21
-6
lines changed

2 files changed

+21
-6
lines changed

src/webviews/calc/calcWebviewView.ts

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,6 @@ export class CalcWebviewView extends GWebviewView {
5151
);
5252
}
5353

54-
dispose() {
55-
Disposable.from(...this._disposables);
56-
super.dispose();
57-
}
58-
5954
private _onConfigurationChanged(e: ConfigurationChangeEvent) {
6055
// Enable / Disable Calculator Webview
6156
if (configuration.changed(e, `${this.id.slice(6)}.enabled`)) {

src/webviews/gWebviewView.ts

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)