Tweak WebviewPanelOnDidChangeViewStateEvent to only provide a webview panel

Expose a webview panel's view state as properties. Make WebviewPanelOnDidChangeViewStateEvent only fire an event with the webview who's state changed
This commit is contained in:
Matt Bierner 2018-04-12 14:22:26 -07:00
parent 23113a4443
commit e16ec3c1ff
3 changed files with 20 additions and 10 deletions

View file

@ -147,13 +147,13 @@ export class MarkdownPreviewManager implements vscode.WebviewPanelSerializer {
}
});
preview.onDidChangeViewState(({ active }) => {
preview.onDidChangeViewState(({ webviewPanel }) => {
disposeAll(this.previews.filter(otherPreview => preview !== otherPreview && preview!.matches(otherPreview)));
vscode.commands.executeCommand('setContext', MarkdownPreviewManager.markdownPreviewActiveContextKey,
active);
webviewPanel.visible);
this.activePreview = active ? preview : undefined;
this.activePreview = webviewPanel.visible ? preview : undefined;
});
return preview;

View file

@ -691,6 +691,11 @@ declare module 'vscode' {
*/
readonly viewColumn?: ViewColumn;
/**
* Is the panel current visible?
*/
readonly visible: boolean;
/**
* Fired when the panel's view state changes.
*/
@ -724,9 +729,14 @@ declare module 'vscode' {
dispose(): any;
}
/**
* Event fired when a webview panel's view state changes.
*/
export interface WebviewPanelOnDidChangeViewStateEvent {
readonly viewColumn: ViewColumn;
readonly active: boolean;
/**
* Webview panel who's view state changed.
*/
readonly webviewPanel: WebviewPanel;
}
/**

View file

@ -97,7 +97,7 @@ export class ExtHostWebviewPanel implements vscode.WebviewPanel {
private readonly _proxy: MainThreadWebviewsShape;
private _isDisposed: boolean = false;
private _viewColumn: vscode.ViewColumn;
private _active: boolean;
private _visible: boolean;
public readonly onDisposeEmitter = new Emitter<void>();
public readonly onDidDispose: Event<void> = this.onDisposeEmitter.event;
@ -155,9 +155,9 @@ export class ExtHostWebviewPanel implements vscode.WebviewPanel {
return this._viewColumn;
}
get active(): boolean {
get visible(): boolean {
this.assertNotDisposed();
return this._active;
return this._visible;
}
set viewColumn(value: vscode.ViewColumn) {
@ -167,7 +167,7 @@ export class ExtHostWebviewPanel implements vscode.WebviewPanel {
set active(value: boolean) {
this.assertNotDisposed();
this._active = value;
this._visible = value;
}
public postMessage(message: any): Thenable<boolean> {
@ -247,7 +247,7 @@ export class ExtHostWebviews implements ExtHostWebviewsShape {
if (panel.active !== active || panel.viewColumn !== viewColumn) {
panel.active = active;
panel.viewColumn = viewColumn;
panel.onDidChangeViewStateEmitter.fire({ active, viewColumn });
panel.onDidChangeViewStateEmitter.fire({ webviewPanel: panel });
}
}
}