提交 5ee3996b 编写于 作者: A Alex Dima

Fixes #56899

上级 64e810dd
......@@ -29,6 +29,9 @@ export abstract class AbstractCodeEditorService extends Disposable implements IC
private readonly _onDiffEditorRemove: Emitter<IDiffEditor> = this._register(new Emitter<IDiffEditor>());
public readonly onDiffEditorRemove: Event<IDiffEditor> = this._onDiffEditorRemove.event;
private readonly _onDidChangeTransientModelProperty: Emitter<ITextModel> = this._register(new Emitter<ITextModel>());
public readonly onDidChangeTransientModelProperty: Event<ITextModel> = this._onDidChangeTransientModelProperty.event;
private _codeEditors: { [editorId: string]: ICodeEditor; };
private _diffEditors: { [editorId: string]: IDiffEditor; };
......@@ -107,6 +110,7 @@ export abstract class AbstractCodeEditorService extends Disposable implements IC
}
w.set(key, value);
this._onDidChangeTransientModelProperty.fire(model);
}
public getTransientModelProperty(model: ITextModel, key: string): any {
......
......@@ -17,11 +17,14 @@ export const ICodeEditorService = createDecorator<ICodeEditorService>('codeEdito
export interface ICodeEditorService {
_serviceBrand: any;
onCodeEditorAdd: Event<ICodeEditor>;
onCodeEditorRemove: Event<ICodeEditor>;
readonly onCodeEditorAdd: Event<ICodeEditor>;
readonly onCodeEditorRemove: Event<ICodeEditor>;
readonly onDiffEditorAdd: Event<IDiffEditor>;
readonly onDiffEditorRemove: Event<IDiffEditor>;
readonly onDidChangeTransientModelProperty: Event<ITextModel>;
onDiffEditorAdd: Event<IDiffEditor>;
onDiffEditorRemove: Event<IDiffEditor>;
addCodeEditor(editor: ICodeEditor): void;
removeCodeEditor(editor: ICodeEditor): void;
......
......@@ -114,23 +114,6 @@ function toggleWordWrap(editor: ICodeEditor, state: IWordWrapState): IWordWrapSt
};
}
function applyWordWrapState(editor: ICodeEditor, state: IWordWrapState): void {
if (state.transientState) {
// toggle is on
editor.updateOptions({
wordWrap: state.transientState.forceWordWrap,
wordWrapMinified: state.transientState.forceWordWrapMinified
});
return;
}
// toggle is off
editor.updateOptions({
wordWrap: state.configuredWordWrap,
wordWrapMinified: state.configuredWordWrapMinified
});
}
const TOGGLE_WORD_WRAP_ID = 'editor.action.toggleWordWrap';
class ToggleWordWrapAction extends EditorAction {
......@@ -170,9 +153,8 @@ class ToggleWordWrapAction extends EditorAction {
// Compute the new state
const newState = toggleWordWrap(editor, currentState);
// Write the new state
// (this will cause an event and the controller will apply the state)
writeTransientState(model, newState.transientState, codeEditorService);
// Apply the new state
applyWordWrapState(editor, newState);
}
}
......@@ -212,6 +194,10 @@ class ToggleWordWrapController extends Disposable implements IEditorContribution
ensureWordWrapSettings();
}));
this._register(codeEditorService.onDidChangeTransientModelProperty(() => {
ensureWordWrapSettings();
}));
const ensureWordWrapSettings = () => {
// Ensure correct word wrap settings
const newModel = this.editor.getModel();
......@@ -234,13 +220,30 @@ class ToggleWordWrapController extends Disposable implements IEditorContribution
// Apply the state
try {
currentlyApplyingEditorConfig = true;
applyWordWrapState(editor, desiredState);
this._applyWordWrapState(desiredState);
} finally {
currentlyApplyingEditorConfig = false;
}
};
}
private _applyWordWrapState(state: IWordWrapState): void {
if (state.transientState) {
// toggle is on
this.editor.updateOptions({
wordWrap: state.transientState.forceWordWrap,
wordWrapMinified: state.transientState.forceWordWrapMinified
});
return;
}
// toggle is off
this.editor.updateOptions({
wordWrap: state.configuredWordWrap,
wordWrapMinified: state.configuredWordWrapMinified
});
}
private _isWordWrapMinified(config: InternalEditorOptions): boolean {
return config.wrappingInfo.isWordWrapMinified;
}
......
......@@ -947,6 +947,7 @@ export class TestCodeEditorService implements ICodeEditorService {
onCodeEditorRemove: Event<ICodeEditor> = Event.None;
onDiffEditorAdd: Event<IDiffEditor> = Event.None;
onDiffEditorRemove: Event<IDiffEditor> = Event.None;
onDidChangeTransientModelProperty: Event<ITextModel> = Event.None;
addCodeEditor(editor: ICodeEditor): void { }
removeCodeEditor(editor: ICodeEditor): void { }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册