提交 38443b43 编写于 作者: A Alex Dima

Use a bulk model content changed listener in the cursor (#21434)

上级 29a859d4
......@@ -769,6 +769,44 @@ export abstract class CommonCodeEditor extends EventEmitter implements editorCom
},
};
this.listenersToRemove.push(this.model.addBulkListener((events) => {
for (let i = 0, len = events.length; i < len; i++) {
let eventType = events[i].getType();
let e = events[i].getData();
switch (eventType) {
case editorCommon.EventType.ModelDecorationsChanged:
this.emit(editorCommon.EventType.ModelDecorationsChanged, e);
break;
case editorCommon.EventType.ModelLanguageChanged:
this.domElement.setAttribute('data-mode-id', this.model.getLanguageIdentifier().language);
this.emit(editorCommon.EventType.ModelLanguageChanged, e);
break;
case editorCommon.EventType.ModelRawContentChanged:
this.emit(editorCommon.EventType.ModelRawContentChanged, e);
break;
case editorCommon.EventType.ModelContentChanged2:
this.emit(editorCommon.EventType.ModelContentChanged2, e);
break;
case editorCommon.EventType.ModelOptionsChanged:
this.emit(editorCommon.EventType.ModelOptionsChanged, e);
break;
case editorCommon.EventType.ModelDispose:
// Someone might destroy the model from under the editor, so prevent any exceptions by setting a null model
this.setModel(null);
break;
default:
// console.warn("Unhandled model event: ", e);
}
}
}));
this.cursor = new Cursor(
this._configuration,
this.model,
......@@ -842,44 +880,6 @@ export abstract class CommonCodeEditor extends EventEmitter implements editorCom
}
}));
this.listenersToRemove.push(this.model.addBulkListener((events) => {
for (let i = 0, len = events.length; i < len; i++) {
let eventType = events[i].getType();
let e = events[i].getData();
switch (eventType) {
case editorCommon.EventType.ModelDecorationsChanged:
this.emit(editorCommon.EventType.ModelDecorationsChanged, e);
break;
case editorCommon.EventType.ModelLanguageChanged:
this.domElement.setAttribute('data-mode-id', this.model.getLanguageIdentifier().language);
this.emit(editorCommon.EventType.ModelLanguageChanged, e);
break;
case editorCommon.EventType.ModelRawContentChanged:
this.emit(editorCommon.EventType.ModelRawContentChanged, e);
break;
case editorCommon.EventType.ModelContentChanged2:
this.emit(editorCommon.EventType.ModelContentChanged2, e);
break;
case editorCommon.EventType.ModelOptionsChanged:
this.emit(editorCommon.EventType.ModelOptionsChanged, e);
break;
case editorCommon.EventType.ModelDispose:
// Someone might destroy the model from under the editor, so prevent any exceptions by setting a null model
this.setModel(null);
break;
default:
// console.warn("Unhandled model event: ", e);
}
}
}));
this.listenersToRemove.push(this.cursor.addBulkListener2((events) => {
for (let i = 0, len = events.length; i < len; i++) {
let eventType = events[i].getType();
......
......@@ -103,8 +103,34 @@ export class Cursor extends EventEmitter {
this._isHandling = false;
this.modelUnbinds = [];
this.modelUnbinds.push(this.model.onDidChangeRawContent((e) => {
this._onModelContentChanged(e);
this.modelUnbinds.push(this.model.addBulkListener((events) => {
if (this._isHandling) {
return;
}
let hadContentChange = false;
let hadFlushEvent = false;
for (let i = 0, len = events.length; i < len; i++) {
const event = events[i];
const eventType = event.getType();
if (eventType === editorCommon.EventType.ModelRawContentChanged) {
hadContentChange = true;
const changeEvent = <editorCommon.IModelContentChangedEvent>event.getData();
if (changeEvent.changeType === editorCommon.EventType.ModelRawContentChangedFlush) {
hadFlushEvent = true;
break;
}
}
}
if (!hadContentChange) {
return;
}
this._onModelContentChanged(hadFlushEvent);
}));
this.modelUnbinds.push(this.model.onDidChangeLanguage((e) => {
this._onModelLanguageChanged();
......@@ -200,8 +226,8 @@ export class Cursor extends EventEmitter {
this.cursors.updateMode();
}
private _onModelContentChanged(e: editorCommon.IModelContentChangedEvent): void {
if (e.changeType === editorCommon.EventType.ModelRawContentChangedFlush) {
private _onModelContentChanged(hadFlushEvent: boolean): void {
if (hadFlushEvent) {
// a model.setValue() was called
this.cursors.dispose();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册