Skip to content

Commit 688b97d

Browse files
committed
Make sure custom editors still correctly override webview undo/redo
For microsoft#90110
1 parent 593ee44 commit 688b97d

1 file changed

Lines changed: 21 additions & 3 deletions

File tree

src/vs/workbench/contrib/customEditor/browser/customEditors.ts

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,32 +3,33 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6-
import { Registry } from 'vs/platform/registry/common/platform';
76
import { coalesce, distinct } from 'vs/base/common/arrays';
87
import { Emitter, Event } from 'vs/base/common/event';
98
import { Lazy } from 'vs/base/common/lazy';
109
import { Disposable, IDisposable, toDisposable } from 'vs/base/common/lifecycle';
1110
import { basename, extname, isEqual } from 'vs/base/common/resources';
1211
import { URI } from 'vs/base/common/uri';
1312
import { generateUuid } from 'vs/base/common/uuid';
13+
import { RedoCommand, UndoCommand } from 'vs/editor/browser/editorExtensions';
1414
import * as nls from 'vs/nls';
1515
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
1616
import { IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
1717
import { EditorActivation, IEditorOptions, ITextEditorOptions } from 'vs/platform/editor/common/editor';
1818
import { FileOperation, IFileService } from 'vs/platform/files/common/files';
1919
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
2020
import { IQuickInputService, IQuickPickItem } from 'vs/platform/quickinput/common/quickInput';
21+
import { Registry } from 'vs/platform/registry/common/platform';
2122
import { IStorageService } from 'vs/platform/storage/common/storage';
2223
import * as colorRegistry from 'vs/platform/theme/common/colorRegistry';
2324
import { registerThemingParticipant } from 'vs/platform/theme/common/themeService';
2425
import { IWorkbenchContribution } from 'vs/workbench/common/contributions';
25-
import { EditorInput, EditorOptions, GroupIdentifier, IEditorInput, IEditorPane, IEditorInputFactoryRegistry, Extensions as EditorInputExtensions } from 'vs/workbench/common/editor';
26+
import { EditorInput, EditorOptions, Extensions as EditorInputExtensions, GroupIdentifier, IEditorInput, IEditorInputFactoryRegistry, IEditorPane } from 'vs/workbench/common/editor';
2627
import { DiffEditorInput } from 'vs/workbench/common/editor/diffEditorInput';
2728
import { CONTEXT_CUSTOM_EDITORS, CONTEXT_FOCUSED_CUSTOM_EDITOR_IS_EDITABLE, CustomEditorCapabilities, CustomEditorInfo, CustomEditorInfoCollection, CustomEditorPriority, ICustomEditorService } from 'vs/workbench/contrib/customEditor/common/customEditor';
2829
import { CustomEditorModelManager } from 'vs/workbench/contrib/customEditor/common/customEditorModelManager';
2930
import { IWebviewService, webviewHasOwnEditFunctionsContext } from 'vs/workbench/contrib/webview/browser/webview';
30-
import { CustomEditorAssociation, CustomEditorsAssociations, customEditorsAssociationsSettingId, defaultEditorOverrideEntry } from 'vs/workbench/services/editor/common/editorOpenWith';
3131
import { IEditorGroup, IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService';
32+
import { CustomEditorAssociation, CustomEditorsAssociations, customEditorsAssociationsSettingId, defaultEditorOverrideEntry } from 'vs/workbench/services/editor/common/editorOpenWith';
3233
import { ICustomEditorInfo, ICustomEditorViewTypesHandler, IEditorService, IOpenEditorOverride, IOpenEditorOverrideEntry } from 'vs/workbench/services/editor/common/editorService';
3334
import { ContributedCustomEditors, defaultCustomEditor } from '../common/contributedCustomEditors';
3435
import { CustomEditorInput } from './customEditorInput';
@@ -80,13 +81,30 @@ export class CustomEditorService extends Disposable implements ICustomEditorServ
8081
}
8182
}));
8283

84+
const PRIORITY = 105;
85+
this._register(UndoCommand.addImplementation(PRIORITY, () => {
86+
return this.withActiveCustomEditor(editor => editor.undo());
87+
}));
88+
this._register(RedoCommand.addImplementation(PRIORITY, () => {
89+
return this.withActiveCustomEditor(editor => editor.redo());
90+
}));
91+
8392
this.updateContexts();
8493
}
8594

8695
getViewTypes(): ICustomEditorInfo[] {
8796
return [...this._contributedEditors];
8897
}
8998

99+
private withActiveCustomEditor(f: (editor: CustomEditorInput) => void): boolean {
100+
const activeEditor = this.editorService.activeEditor;
101+
if (activeEditor instanceof CustomEditorInput) {
102+
f(activeEditor);
103+
return true;
104+
}
105+
return false;
106+
}
107+
90108
public get models() { return this._models; }
91109

92110
public getCustomEditor(viewType: string): CustomEditorInfo | undefined {

0 commit comments

Comments
 (0)