From 16a32fa6c44885e7ea0b1eacb4944528602f8252 Mon Sep 17 00:00:00 2001 From: Benjamin Christopher Simmonds <44439583+benibenj@users.noreply.github.com> Date: Thu, 28 Mar 2024 12:01:23 +0100 Subject: [PATCH] Fix Tree Sticky Scroll compression with `workbench.tree.stickyScrollMaxItemCount = 1` (#209005) fix #204613 --- src/vs/base/browser/ui/tree/objectTree.ts | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/vs/base/browser/ui/tree/objectTree.ts b/src/vs/base/browser/ui/tree/objectTree.ts index 894f74ce921..aa46a9a641d 100644 --- a/src/vs/base/browser/ui/tree/objectTree.ts +++ b/src/vs/base/browser/ui/tree/objectTree.ts @@ -192,18 +192,20 @@ class CompressibleStickyScrollDelegate implements IStickyScrollD if (stickyNodes.length === 0) { throw new Error('Can\'t compress empty sticky nodes'); } - - if (!this.modelProvider().isCompressionEnabled()) { + const compressionModel = this.modelProvider(); + if (!compressionModel.isCompressionEnabled()) { return stickyNodes[0]; } // Collect all elements to be compressed const elements: T[] = []; - for (const stickyNode of stickyNodes) { - const compressedNode = this.modelProvider().getCompressedTreeNode(stickyNode.node.element); + for (let i = 0; i < stickyNodes.length; i++) { + const stickyNode = stickyNodes[i]; + const compressedNode = compressionModel.getCompressedTreeNode(stickyNode.node.element); if (compressedNode.element) { - if (compressedNode.element.incompressible) { + // if an element is incompressible, it can't be compressed with it's parent element + if (i !== 0 && compressedNode.element.incompressible) { break; } elements.push(...compressedNode.element.elements);