diff --git a/src/vs/base/browser/ui/list/listWidget.ts b/src/vs/base/browser/ui/list/listWidget.ts index 1f9a9b0aa72..4e497b12fbd 100644 --- a/src/vs/base/browser/ui/list/listWidget.ts +++ b/src/vs/base/browser/ui/list/listWidget.ts @@ -1762,9 +1762,10 @@ export class List implements ISpliceable, IDisposable { } } - async focusPreviousPage(browserEvent?: UIEvent, filter?: (element: T) => boolean): Promise { + async focusPreviousPage(browserEvent?: UIEvent, filter?: (element: T) => boolean, getPaddingTop: () => number = () => 0): Promise { let firstPageIndex: number; - const scrollTop = this.view.getScrollTop(); + const paddingTop = getPaddingTop(); + const scrollTop = this.view.getScrollTop() + paddingTop; if (scrollTop === 0) { firstPageIndex = this.view.indexAt(scrollTop); @@ -1784,14 +1785,14 @@ export class List implements ISpliceable, IDisposable { } } else { const previousScrollTop = scrollTop; - this.view.setScrollTop(scrollTop - this.view.renderHeight); + this.view.setScrollTop(scrollTop - this.view.renderHeight - paddingTop); - if (this.view.getScrollTop() !== previousScrollTop) { + if (this.view.getScrollTop() + getPaddingTop() !== previousScrollTop) { this.setFocus([]); // Let the scroll event listener run await timeout(0); - await this.focusPreviousPage(browserEvent, filter); + await this.focusPreviousPage(browserEvent, filter, getPaddingTop); } } } diff --git a/src/vs/base/browser/ui/tree/abstractTree.ts b/src/vs/base/browser/ui/tree/abstractTree.ts index 8d8b317d2ae..d3ce16ad04d 100644 --- a/src/vs/base/browser/ui/tree/abstractTree.ts +++ b/src/vs/base/browser/ui/tree/abstractTree.ts @@ -2880,7 +2880,7 @@ export abstract class AbstractTree implements IDisposable } focusPreviousPage(browserEvent?: UIEvent, filter = (isKeyboardEvent(browserEvent) && browserEvent.altKey) ? undefined : this.focusNavigationFilter): Promise { - return this.view.focusPreviousPage(browserEvent, filter); + return this.view.focusPreviousPage(browserEvent, filter, () => this.stickyScrollController?.height ?? 0); } focusLast(browserEvent?: UIEvent, filter = (isKeyboardEvent(browserEvent) && browserEvent.altKey) ? undefined : this.focusNavigationFilter): void {