Move webview to use onDidChangeViewState event

After discussions, we settled on making the webview private unlike `TextEditors`. This means that webview events will live on the webview object itself

Fixes #44571
This commit is contained in:
Matt Bierner
2018-03-20 13:40:24 -07:00
parent 54f1a18020
commit 27a17935b8
7 changed files with 60 additions and 69 deletions

View File

@@ -56,8 +56,8 @@ export class MarkdownPreview {
this.dispose();
}, null, this.disposables);
this.webview.onDidChangeViewColumn(() => {
this._onDidChangeViewColumnEmitter.fire();
this.webview.onDidChangeViewState(e => {
this._onDidChangeViewStateEmitter.fire(e);
}, null, this.disposables);
this.webview.onDidReceiveMessage(e => {
@@ -107,8 +107,8 @@ export class MarkdownPreview {
private readonly _onDisposeEmitter = new vscode.EventEmitter<void>();
public readonly onDispose = this._onDisposeEmitter.event;
private readonly _onDidChangeViewColumnEmitter = new vscode.EventEmitter<vscode.ViewColumn>();
public readonly onDidChangeViewColumn = this._onDidChangeViewColumnEmitter.event;
private readonly _onDidChangeViewStateEmitter = new vscode.EventEmitter<vscode.WebViewOnDidChangeViewStateEvent>();
public readonly onDidChangeViewState = this._onDidChangeViewStateEmitter.event;
public get resource(): vscode.Uri {
return this._resource;
@@ -118,7 +118,7 @@ export class MarkdownPreview {
this._onDisposeEmitter.fire();
this._onDisposeEmitter.dispose();
this._onDidChangeViewColumnEmitter.dispose();
this._onDidChangeViewStateEmitter.dispose();
this.webview.dispose();
disposeAll(this.disposables);

View File

@@ -28,15 +28,8 @@ export class MarkdownPreviewManager {
private readonly logger: Logger,
private readonly contributions: MarkdownContributions
) {
vscode.window.onDidChangeActiveEditor(editor => {
vscode.commands.executeCommand('setContext', MarkdownPreviewManager.markdownPreviewActiveContextKey,
editor && editor.editorType === 'webview' && editor.uri.scheme === MarkdownPreview.previewScheme);
this.activePreview = editor && editor.editorType === 'webview'
? this.previews.find(preview => editor.uri.toString() === preview.uri.toString())
: undefined;
if (editor && editor.editorType === 'texteditor') {
vscode.window.onDidChangeActiveTextEditor(editor => {
if (editor) {
if (isMarkdownFile(editor.document)) {
for (const preview of this.previews.filter(preview => !preview.locked)) {
preview.update(editor.document.uri);
@@ -44,6 +37,7 @@ export class MarkdownPreviewManager {
}
}
}, null, this.disposables);
}
public dispose(): void {
@@ -134,8 +128,13 @@ export class MarkdownPreviewManager {
}
});
preview.onDidChangeViewColumn(() => {
preview.onDidChangeViewState(({ active }) => {
disposeAll(this.previews.filter(otherPreview => preview !== otherPreview && preview!.matches(otherPreview)));
vscode.commands.executeCommand('setContext', MarkdownPreviewManager.markdownPreviewActiveContextKey,
active);
this.activePreview = active ? preview : undefined;
});
return preview;