提交 f9ecd438 编写于 作者: R Rob Lourens

Fix rerendering loop - only allow one layout per cell at a time

上级 3bbf8337
...@@ -10,7 +10,7 @@ import { CancellationTokenSource } from 'vs/base/common/cancellation'; ...@@ -10,7 +10,7 @@ import { CancellationTokenSource } from 'vs/base/common/cancellation';
import { Color, RGBA } from 'vs/base/common/color'; import { Color, RGBA } from 'vs/base/common/color';
import { onUnexpectedError } from 'vs/base/common/errors'; import { onUnexpectedError } from 'vs/base/common/errors';
import { Emitter, Event } from 'vs/base/common/event'; import { Emitter, Event } from 'vs/base/common/event';
import { combinedDisposable, DisposableStore, Disposable } from 'vs/base/common/lifecycle'; import { combinedDisposable, DisposableStore, Disposable, IDisposable, toDisposable } from 'vs/base/common/lifecycle';
import 'vs/css!./media/notebook'; import 'vs/css!./media/notebook';
import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser';
import { IEditorOptions } from 'vs/editor/common/config/editorOptions'; import { IEditorOptions } from 'vs/editor/common/config/editorOptions';
...@@ -732,6 +732,8 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor ...@@ -732,6 +732,8 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor
private readonly _onMouseDown: Emitter<INotebookEditorMouseEvent> = this._register(new Emitter<INotebookEditorMouseEvent>()); private readonly _onMouseDown: Emitter<INotebookEditorMouseEvent> = this._register(new Emitter<INotebookEditorMouseEvent>());
public readonly onMouseDown: Event<INotebookEditorMouseEvent> = this._onMouseDown.event; public readonly onMouseDown: Event<INotebookEditorMouseEvent> = this._onMouseDown.event;
private pendingLayouts = new WeakMap<ICellViewModel, IDisposable>();
//#endregion //#endregion
//#region Cell operations //#region Cell operations
...@@ -746,16 +748,27 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor ...@@ -746,16 +748,27 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor
this.list?.updateElementHeight2(cell, height); this.list?.updateElementHeight2(cell, height);
}; };
if (this.pendingLayouts.has(cell)) {
this.pendingLayouts.get(cell)!.dispose();
}
let r: () => void; let r: () => void;
DOM.scheduleAtNextAnimationFrame(() => { const layoutDisposable = DOM.scheduleAtNextAnimationFrame(() => {
if (this._isDisposed) { if (this._isDisposed) {
return; return;
} }
this.pendingLayouts.delete(cell);
relayout(cell, height); relayout(cell, height);
r(); r();
}); });
this.pendingLayouts.set(cell, toDisposable(() => {
layoutDisposable.dispose();
r();
}));
return new Promise(resolve => { r = resolve; }); return new Promise(resolve => { r = resolve; });
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册