@@ -28,7 +28,10 @@ import { IExtensionService } from 'vs/workbench/services/extensions/common/exten
28
28
29
29
declare const ResizeObserver : any ;
30
30
31
- const webviewStateKey = 'webviewState' ;
31
+ const storageKeys = {
32
+ webviewState : 'webviewState' ,
33
+ title : 'title'
34
+ } as const ;
32
35
33
36
export class WebviewViewPane extends ViewPane {
34
37
@@ -38,6 +41,9 @@ export class WebviewViewPane extends ViewPane {
38
41
private _container ?: HTMLElement ;
39
42
private _resizeObserver ?: any ;
40
43
44
+ private readonly defaultTitle : string ;
45
+ private setTitle : string | undefined ;
46
+
41
47
private readonly memento : Memento ;
42
48
private readonly viewState : MementoObject ;
43
49
@@ -60,10 +66,16 @@ export class WebviewViewPane extends ViewPane {
60
66
@IViewsService private readonly viewService : IViewsService ,
61
67
) {
62
68
super ( { ...options , titleMenuId : MenuId . ViewTitle } , keybindingService , contextMenuService , configurationService , contextKeyService , viewDescriptorService , instantiationService , openerService , themeService , telemetryService ) ;
69
+ this . defaultTitle = this . title ;
63
70
64
71
this . memento = new Memento ( `webviewView.${ this . id } ` , storageService ) ;
65
72
this . viewState = this . memento . getMemento ( StorageScope . WORKSPACE ) ;
66
73
74
+ const storedTitle = this . viewState [ storageKeys . title ] ;
75
+ if ( typeof storedTitle === 'string' ) {
76
+ this . updateTitle ( storedTitle ) ;
77
+ }
78
+
67
79
this . _register ( this . onDidChangeBodyVisibility ( ( ) => this . updateTreeVisibility ( ) ) ) ;
68
80
this . updateTreeVisibility ( ) ;
69
81
}
@@ -108,8 +120,9 @@ export class WebviewViewPane extends ViewPane {
108
120
109
121
public saveState ( ) {
110
122
if ( this . _webview ) {
111
- this . viewState [ webviewStateKey ] = this . _webview . state ;
123
+ this . viewState [ storageKeys . webviewState ] = this . _webview . state ;
112
124
}
125
+ this . viewState [ storageKeys . title ] = this . setTitle ;
113
126
114
127
this . memento . saveMemento ( ) ;
115
128
super . saveState ( ) ;
@@ -142,15 +155,15 @@ export class WebviewViewPane extends ViewPane {
142
155
143
156
const webviewId = `webviewView-${ this . id . replace ( / [ ^ a - z 0 - 9 ] / gi, '-' ) } ` . toLowerCase ( ) ;
144
157
const webview = this . webviewService . createWebviewOverlay ( webviewId , { } , { } , undefined ) ;
145
- webview . state = this . viewState [ ' webviewState' ] ;
158
+ webview . state = this . viewState [ storageKeys . webviewState ] ;
146
159
this . _webview = webview ;
147
160
148
161
this . _register ( toDisposable ( ( ) => {
149
162
this . _webview ?. release ( this ) ;
150
163
} ) ) ;
151
164
152
165
this . _register ( webview . onDidUpdateState ( ( ) => {
153
- this . viewState [ webviewStateKey ] = webview . state ;
166
+ this . viewState [ storageKeys . webviewState ] = webview . state ;
154
167
} ) ) ;
155
168
156
169
const source = this . _register ( new CancellationTokenSource ( ) ) ;
@@ -164,8 +177,8 @@ export class WebviewViewPane extends ViewPane {
164
177
onDidChangeVisibility : this . onDidChangeBodyVisibility ,
165
178
onDispose : this . onDispose ,
166
179
167
- get title ( ) { return self . title ; } ,
168
- set title ( value : string ) { self . updateTitle ( value ) ; } ,
180
+ get title ( ) : string | undefined { return self . setTitle ; } ,
181
+ set title ( value : string | undefined ) { self . updateTitle ( value ) ; } ,
169
182
170
183
get description ( ) : string | undefined { return self . titleDescription ; } ,
171
184
set description ( value : string | undefined ) { self . updateTitleDescription ( value ) ; } ,
@@ -180,6 +193,11 @@ export class WebviewViewPane extends ViewPane {
180
193
}
181
194
}
182
195
196
+ protected updateTitle ( value : string | undefined ) {
197
+ this . setTitle = value ;
198
+ super . updateTitle ( typeof value === 'string' ? value : this . defaultTitle ) ;
199
+ }
200
+
183
201
private async withProgress ( task : ( ) => Promise < void > ) : Promise < void > {
184
202
return this . progressService . withProgress ( { location : this . id , delay : 500 } , task ) ;
185
203
}
0 commit comments