From c811becbbbe37dafa5ffa9a261079c19daf21d81 Mon Sep 17 00:00:00 2001 From: Jackson Kearl Date: Tue, 8 Mar 2022 16:59:33 -0800 Subject: [PATCH] Improve Nest Rendering - Force nests to render with a twistie - Resolve alignment issues by hiding nested parent icon to match folders Fixes #142938, #141428, #141359 --- .../files/browser/views/explorerViewer.ts | 44 ++++++++++++++----- 1 file changed, 34 insertions(+), 10 deletions(-) diff --git a/src/vs/workbench/contrib/files/browser/views/explorerViewer.ts b/src/vs/workbench/contrib/files/browser/views/explorerViewer.ts index 59355b50c84..a7e6740273c 100644 --- a/src/vs/workbench/contrib/files/browser/views/explorerViewer.ts +++ b/src/vs/workbench/contrib/files/browser/views/explorerViewer.ts @@ -365,28 +365,52 @@ export class FilesRenderer implements ICompressibleTreeRenderer { + + const setResourceData = () => { + const theme = this.themeService.getFileIconTheme(); + // Dont render file icons for nest parents unless folders have both chevrons and icons, otherwise alignment breaks + const hideNestParentFileIcons = theme.hidesExplorerArrows || !theme.hasFolderIcons; + + templateData.label.setResource({ resource: stat.resource, name: label }, { + fileKind: stat.isRoot ? FileKind.ROOT_FOLDER : stat.isDirectory ? FileKind.FOLDER : FileKind.FILE, + extraClasses, + hideIcon: stat.hasNests && hideNestParentFileIcons, + fileDecorations: this.config.explorer.decorations, + matches: createMatches(filterData), + separator: this.labelService.getSeparator(stat.resource.scheme, stat.resource.authority), + domId + }); + }; + + elementDisposables.add(this.themeService.onDidFileIconThemeChange(() => setResourceData())); + setResourceData(); + + elementDisposables.add(templateData.label.onDidRender(() => { try { this.updateWidth(stat); } catch (e) { // noop since the element might no longer be in the tree, no update of width necessary } - }); + })); + + return elementDisposables; } private renderInputBox(container: HTMLElement, stat: ExplorerItem, editableData: IEditableData): IDisposable {