提交 ac9e97aa 编写于 作者: R rebornix

delay cells change from revert.

上级 3da35605
......@@ -56,7 +56,7 @@ async function splitEditor() {
await once;
}
suite('API tests', () => {
suite('Notebook API tests', () => {
test('document open/close event', async function () {
const resource = vscode.Uri.file(join(vscode.workspace.rootPath || '', './first.vsctestnb'));
const firstDocumentOpen = getEventOncePromise(vscode.notebook.onDidOpenNotebookDocument);
......
......@@ -4,6 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import * as nls from 'vs/nls';
import * as DOM from 'vs/base/browser/dom';
import { extHostNamedCustomer } from 'vs/workbench/api/common/extHostCustomers';
import { MainContext, MainThreadNotebookShape, NotebookExtensionDescription, IExtHostContext, ExtHostNotebookShape, ExtHostContext, INotebookDocumentsAndEditorsDelta, INotebookModelAddedData } from '../common/extHost.protocol';
import { Disposable, IDisposable, combinedDisposable } from 'vs/base/common/lifecycle';
......@@ -51,9 +52,18 @@ export class MainThreadNotebookDocument extends Disposable {
}));
}
async applyEdit(modelVersionId: number, edits: ICellEditOperation[], emitToExtHost: boolean): Promise<boolean> {
async applyEdit(modelVersionId: number, edits: ICellEditOperation[], emitToExtHost: boolean, synchronous: boolean): Promise<boolean> {
await this.notebookService.transformEditsOutputs(this.textModel, edits);
return this._textModel.$applyEdit(modelVersionId, edits);
if (synchronous) {
return this._textModel.$applyEdit(modelVersionId, edits, emitToExtHost, synchronous);
} else {
return new Promise(resolve => {
this._register(DOM.scheduleAtNextAnimationFrame(() => {
const ret = this._textModel.$applyEdit(modelVersionId, edits, emitToExtHost, true);
resolve(ret);
}));
});
}
}
async spliceNotebookCellOutputs(cellHandle: number, splices: NotebookCellOutputsSplice[]) {
......@@ -533,7 +543,7 @@ export class MainThreadNotebookController implements IMainNotebookController {
await mainthreadNotebook.applyEdit(mainthreadNotebook.textModel.versionId, [
{ editType: CellEditType.Delete, count: mainthreadNotebook.textModel.cells.length, index: 0 },
{ editType: CellEditType.Insert, index: 0, cells: data.cells }
], true);
], true, false);
}
return mainthreadNotebook.textModel;
}
......@@ -553,7 +563,7 @@ export class MainThreadNotebookController implements IMainNotebookController {
index: 0,
cells: backup.cells || []
}
], false);
], false, true);
// create document in ext host with cells data
await this._mainThreadNotebook.addNotebookDocument({
......@@ -630,7 +640,7 @@ export class MainThreadNotebookController implements IMainNotebookController {
let mainthreadNotebook = this._mapping.get(URI.from(resource).toString());
if (mainthreadNotebook) {
return await mainthreadNotebook.applyEdit(modelVersionId, edits, true);
return await mainthreadNotebook.applyEdit(modelVersionId, edits, true, true);
}
return false;
......
......@@ -207,7 +207,7 @@ export class NotebookCellList extends WorkbenchList<CellViewModel> implements ID
deletedOutputs.forEach(output => this._onDidRemoveOutput.fire(output));
});
} else {
DOM.scheduleAtNextAnimationFrame(() => {
this._viewModelStore.add(DOM.scheduleAtNextAnimationFrame(() => {
if (this._isDisposed) {
return;
}
......@@ -230,7 +230,7 @@ export class NotebookCellList extends WorkbenchList<CellViewModel> implements ID
hideOutputs.forEach(output => this._onDidHideOutput.fire(output));
deletedOutputs.forEach(output => this._onDidRemoveOutput.fire(output));
});
});
}));
}
}));
......
......@@ -170,7 +170,7 @@ export class NotebookTextModel extends Disposable implements INotebookTextModel
this._increaseVersionId();
}
$applyEdit(modelVersionId: number, rawEdits: ICellEditOperation[], emitToExtHost: boolean): boolean {
$applyEdit(modelVersionId: number, rawEdits: ICellEditOperation[], emitToExtHost: boolean, synchronous: boolean): boolean {
if (modelVersionId !== this._versionId) {
return false;
}
......@@ -259,7 +259,7 @@ export class NotebookTextModel extends Disposable implements INotebookTextModel
emitSelections: this._emitSelectionsDelegate.bind(this)
}, undefined, undefined));
this._onDidChangeCells.fire({ synchronous: true, splices: diffs });
this._onDidChangeCells.fire({ synchronous: synchronous, splices: diffs });
return true;
}
......
......@@ -31,7 +31,7 @@ suite('NotebookTextModel', () => {
textModel.$applyEdit(textModel.versionId, [
{ editType: CellEditType.Insert, index: 1, cells: [new TestCell(viewModel.viewType, 5, ['var e = 5;'], 'javascript', CellKind.Code, [])] },
{ editType: CellEditType.Insert, index: 3, cells: [new TestCell(viewModel.viewType, 6, ['var f = 6;'], 'javascript', CellKind.Code, [])] },
], true);
], true, true);
assert.equal(textModel.cells.length, 6);
......@@ -56,7 +56,7 @@ suite('NotebookTextModel', () => {
textModel.$applyEdit(textModel.versionId, [
{ editType: CellEditType.Insert, index: 1, cells: [new TestCell(viewModel.viewType, 5, ['var e = 5;'], 'javascript', CellKind.Code, [])] },
{ editType: CellEditType.Insert, index: 1, cells: [new TestCell(viewModel.viewType, 6, ['var f = 6;'], 'javascript', CellKind.Code, [])] },
], true);
], true, true);
assert.equal(textModel.cells.length, 6);
......@@ -81,7 +81,7 @@ suite('NotebookTextModel', () => {
textModel.$applyEdit(textModel.versionId, [
{ editType: CellEditType.Delete, index: 1, count: 1 },
{ editType: CellEditType.Delete, index: 3, count: 1 },
], true);
], true, true);
assert.equal(textModel.cells[0].getValue(), 'var a = 1;');
assert.equal(textModel.cells[1].getValue(), 'var c = 3;');
......@@ -104,7 +104,7 @@ suite('NotebookTextModel', () => {
textModel.$applyEdit(textModel.versionId, [
{ editType: CellEditType.Delete, index: 1, count: 1 },
{ editType: CellEditType.Insert, index: 3, cells: [new TestCell(viewModel.viewType, 5, ['var e = 5;'], 'javascript', CellKind.Code, [])] },
], true);
], true, true);
assert.equal(textModel.cells.length, 4);
......@@ -129,7 +129,7 @@ suite('NotebookTextModel', () => {
textModel.$applyEdit(textModel.versionId, [
{ editType: CellEditType.Delete, index: 1, count: 1 },
{ editType: CellEditType.Insert, index: 1, cells: [new TestCell(viewModel.viewType, 5, ['var e = 5;'], 'javascript', CellKind.Code, [])] },
], true);
], true, true);
assert.equal(textModel.cells.length, 4);
assert.equal(textModel.cells[0].getValue(), 'var a = 1;');
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册