Skip to content

Commit 20a512d

Browse files
authored
Fix microsoft#126178; fixes markdown scrolling bug
2 parents 92c259a + 3300069 commit 20a512d

File tree

3 files changed

+23
-11
lines changed

3 files changed

+23
-11
lines changed

extensions/markdown-language-features/src/features/preview.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -531,7 +531,7 @@ export class StaticMarkdownPreview extends Disposable implements ManagedMarkdown
531531
}));
532532

533533
this._register(this.preview.onScroll((scrollInfo) => {
534-
topmostLineMonitor.setPreviousEditorLine(scrollInfo);
534+
topmostLineMonitor.setPreviousStaticEditorLine(scrollInfo);
535535
}));
536536

537537
this._register(topmostLineMonitor.onDidChanged(event => {

extensions/markdown-language-features/src/features/previewManager.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ export class MarkdownPreviewManager extends Disposable implements vscode.Webview
8181

8282
// When at a markdown file, apply existing scroll settings
8383
if (textEditor && textEditor.document && isMarkdownFile(textEditor.document)) {
84-
const line = this._topmostLineMonitor.getPreviousEditorLineByUri(textEditor.document.uri);
84+
const line = this._topmostLineMonitor.getPreviousStaticEditorLineByUri(textEditor.document.uri);
8585
if (line) {
8686
scrollEditorToLine(line, textEditor);
8787
}
@@ -172,7 +172,7 @@ export class MarkdownPreviewManager extends Disposable implements vscode.Webview
172172
document: vscode.TextDocument,
173173
webview: vscode.WebviewPanel
174174
): Promise<void> {
175-
const lineNumber = this._topmostLineMonitor.getPreviousEditorLineByUri(document.uri);
175+
const lineNumber = this._topmostLineMonitor.getPreviousTextEditorLineByUri(document.uri);
176176
const preview = StaticMarkdownPreview.revive(
177177
document.uri,
178178
webview,

extensions/markdown-language-features/src/util/topmostLineMonitor.ts

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,23 +16,23 @@ export class TopmostLineMonitor extends Disposable {
1616

1717
private readonly pendingUpdates = new Map<string, number>();
1818
private readonly throttle = 50;
19-
private previousEditorInfo = new Map<string, LastScrollLocation>();
20-
public isPrevEditorCustom = false;
19+
private previousTextEditorInfo = new Map<string, LastScrollLocation>();
20+
private previousStaticEditorInfo = new Map<string, LastScrollLocation>();
2121

2222
constructor() {
2323
super();
2424

2525
if (vscode.window.activeTextEditor) {
2626
const line = getVisibleLine(vscode.window.activeTextEditor);
27-
this.setPreviousEditorLine({ uri: vscode.window.activeTextEditor.document.uri, line: line ?? 0 });
27+
this.setPreviousTextEditorLine({ uri: vscode.window.activeTextEditor.document.uri, line: line ?? 0 });
2828
}
2929

3030
this._register(vscode.window.onDidChangeTextEditorVisibleRanges(event => {
3131
if (isMarkdownFile(event.textEditor.document)) {
3232
const line = getVisibleLine(event.textEditor);
3333
if (typeof line === 'number') {
3434
this.updateLine(event.textEditor.document.uri, line);
35-
this.setPreviousEditorLine({ uri: event.textEditor.document.uri, line: line });
35+
this.setPreviousTextEditorLine({ uri: event.textEditor.document.uri, line: line });
3636
}
3737
}
3838
}));
@@ -41,12 +41,24 @@ export class TopmostLineMonitor extends Disposable {
4141
private readonly _onChanged = this._register(new vscode.EventEmitter<{ readonly resource: vscode.Uri, readonly line: number }>());
4242
public readonly onDidChanged = this._onChanged.event;
4343

44-
public setPreviousEditorLine(scrollLocation: LastScrollLocation): void {
45-
this.previousEditorInfo.set(scrollLocation.uri.toString(), scrollLocation);
44+
public setPreviousStaticEditorLine(scrollLocation: LastScrollLocation): void {
45+
this.previousStaticEditorInfo.set(scrollLocation.uri.toString(), scrollLocation);
4646
}
4747

48-
public getPreviousEditorLineByUri(resource: vscode.Uri): number | undefined {
49-
const scrollLoc = this.previousEditorInfo.get(resource.toString());
48+
public getPreviousStaticEditorLineByUri(resource: vscode.Uri): number | undefined {
49+
const scrollLoc = this.previousStaticEditorInfo.get(resource.toString());
50+
this.previousStaticEditorInfo.delete(resource.toString());
51+
return scrollLoc?.line;
52+
}
53+
54+
55+
public setPreviousTextEditorLine(scrollLocation: LastScrollLocation): void {
56+
this.previousTextEditorInfo.set(scrollLocation.uri.toString(), scrollLocation);
57+
}
58+
59+
public getPreviousTextEditorLineByUri(resource: vscode.Uri): number | undefined {
60+
const scrollLoc = this.previousTextEditorInfo.get(resource.toString());
61+
this.previousTextEditorInfo.delete(resource.toString());
5062
return scrollLoc?.line;
5163
}
5264

0 commit comments

Comments
 (0)