Skip to content

Commit 9ff83d4

Browse files
authored
Fix microsoft#180876. Fix initial view rendering missed in find. (microsoft#182537)
1 parent 929c7a5 commit 9ff83d4

File tree

3 files changed

+28
-8
lines changed

3 files changed

+28
-8
lines changed

src/vs/workbench/contrib/notebook/browser/notebookEditorWidget.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1540,7 +1540,7 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditorD
15401540
// make sure that the webview is not visible otherwise users will see pre-rendered markdown cells in wrong position as the list view doesn't have a correct `top` offset yet
15411541
this._webview!.element.style.visibility = 'hidden';
15421542
// warm up can take around 200ms to load markdown libraries, etc.
1543-
await this._warmupViewport(viewModel, viewState);
1543+
await this._warmupViewportMarkdownCells(viewModel, viewState);
15441544
this.logService.debug('NotebookEditorWidget', 'warmup - viewport warmed up');
15451545

15461546
// todo@rebornix @mjbvz, is this too complicated?
@@ -1564,7 +1564,7 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditorD
15641564
this._onDidAttachViewModel.fire();
15651565
}
15661566

1567-
private async _warmupViewport(viewModel: NotebookViewModel, viewState: INotebookEditorViewState | undefined) {
1567+
private async _warmupViewportMarkdownCells(viewModel: NotebookViewModel, viewState: INotebookEditorViewState | undefined) {
15681568
if (viewState && viewState.cellTotalHeights) {
15691569
const totalHeightCache = viewState.cellTotalHeights;
15701570
const scrollTop = viewState.scrollPosition?.top ?? 0;
@@ -2404,7 +2404,8 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditorD
24042404
}
24052405

24062406
const result: IInsetRenderOutput = { type: RenderOutputType.Extension, renderer, source: output, mimeType: pickedMimeTypeRenderer.mimeType };
2407-
if (!this._webview?.insetMapping.has(result.source)) {
2407+
const inset = this._webview?.insetMapping.get(result.source);
2408+
if (!inset || !inset.initialized) {
24082409
const p = new Promise<void>(resolve => {
24092410
this._register(Event.any(this.onDidRenderOutput, this.onDidRemoveOutput)(e => {
24102411
if (e.model === result.source.model) {

src/vs/workbench/contrib/notebook/browser/view/renderers/backLayerWebView.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ export interface ICachedInset<K extends ICommonCellInfo> {
6666
cellInfo: K;
6767
renderer?: INotebookRendererInfo;
6868
cachedCreation: ICreationRequestMessage;
69+
initialized?: boolean;
6970
}
7071

7172
export interface IResolvedBackLayerWebview {
@@ -612,6 +613,21 @@ export class BackLayerWebView<T extends ICommonCellInfo> extends Themable {
612613

613614
this.reversedPendingWebviewIdleInsetMapping.delete(update.id);
614615
}
616+
617+
{
618+
if (!update.init) {
619+
return;
620+
}
621+
622+
const output = this.reversedInsetMapping.get(update.id);
623+
624+
if (!output) {
625+
return;
626+
}
627+
628+
const inset = this.insetMapping.get(output)!;
629+
inset.initialized = true;
630+
}
615631
} else {
616632
this.notebookEditor.updateMarkupCellHeight(update.id, height, !!update.init);
617633
}

src/vs/workbench/contrib/search/browser/searchModel.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1533,6 +1533,7 @@ export class SearchResult extends Disposable {
15331533
private disposePastResults: () => void = () => { };
15341534
private _isDirty = false;
15351535
private _onWillChangeModelListener: IDisposable | undefined;
1536+
private _onDidChangeModelListener: IDisposable | undefined;
15361537

15371538
constructor(
15381539
private _searchModel: SearchModel,
@@ -1676,14 +1677,15 @@ export class SearchResult extends Disposable {
16761677
}
16771678
);
16781679

1679-
widget.onDidChangeModel(
1680-
(model) => {
1681-
if (model) {
1682-
this.onNotebookEditorWidgetAdded(widget, model?.uri);
1680+
this._onDidChangeModelListener?.dispose();
1681+
// listen to view model change as we are searching on both inputs and outputs
1682+
this._onDidChangeModelListener = widget.onDidAttachViewModel(
1683+
() => {
1684+
if (widget.hasModel()) {
1685+
this.onNotebookEditorWidgetAdded(widget, widget.textModel.uri);
16831686
}
16841687
}
16851688
);
1686-
16871689
}
16881690

16891691
private onModelAdded(model: ITextModel): void {
@@ -1894,6 +1896,7 @@ export class SearchResult extends Disposable {
18941896

18951897
override dispose(): void {
18961898
this._onWillChangeModelListener?.dispose();
1899+
this._onDidChangeModelListener?.dispose();
18971900
this.disposePastResults();
18981901
this.disposeMatches();
18991902
this._rangeHighlightDecorations.dispose();

0 commit comments

Comments
 (0)