diff --git a/src/vs/workbench/browser/parts/editor/media/notabstitlecontrol.css b/src/vs/workbench/browser/parts/editor/media/notabstitlecontrol.css index 61440406d69..b737c53817c 100644 --- a/src/vs/workbench/browser/parts/editor/media/notabstitlecontrol.css +++ b/src/vs/workbench/browser/parts/editor/media/notabstitlecontrol.css @@ -6,7 +6,7 @@ /* Title Label */ .monaco-workbench .part.editor > .content .editor-group-container > .title > .label-container { - height: 35px; + height: var(--tab-height); display: flex; justify-content: flex-start; align-items: center; @@ -15,7 +15,7 @@ } .monaco-workbench .part.editor > .content .editor-group-container > .title > .label-container > .title-label { - line-height: 35px; + line-height: var(--tab-height); overflow: hidden; text-overflow: ellipsis; position: relative; @@ -94,7 +94,7 @@ flex: initial; opacity: 0.5; padding-right: 8px; - height: 35px; + height: var(--tab-height); } .monaco-workbench .part.editor > .content .editor-group-container > .title > .title-actions .action-item { diff --git a/src/vs/workbench/browser/parts/editor/noTabsTitleControl.ts b/src/vs/workbench/browser/parts/editor/noTabsTitleControl.ts index d60267cd22f..bc4e3b25e21 100644 --- a/src/vs/workbench/browser/parts/editor/noTabsTitleControl.ts +++ b/src/vs/workbench/browser/parts/editor/noTabsTitleControl.ts @@ -50,6 +50,8 @@ export class NoTabsTitleControl extends TitleControl { this.editorLabel = this._register(this.instantiationService.createInstance(ResourceLabel, labelContainer, undefined)).element; this._register(addDisposableListener(this.editorLabel.element, EventType.CLICK, e => this.onTitleLabelClick(e))); + this.updateTabHeight(); + // Breadcrumbs this.createBreadcrumbsControl(labelContainer, { showFileIcons: false, showSymbolIcons: true, showDecorationColors: false, widgetStyles: { ...defaultBreadcrumbsWidgetStyles, breadcrumbsBackground: Color.transparent.toString() }, showPlaceholder: false }); titleContainer.classList.toggle('breadcrumbs', Boolean(this.breadcrumbsControl)); @@ -198,6 +200,11 @@ export class NoTabsTitleControl extends TitleControl { } updateOptions(oldOptions: IEditorPartOptions, newOptions: IEditorPartOptions): void { + // Update tab height + if (oldOptions.tabHeight !== newOptions.tabHeight) { + this.updateTabHeight(); + } + if (oldOptions.labelFormat !== newOptions.labelFormat || !equals(oldOptions.decorations, newOptions.decorations)) { this.redraw(); } diff --git a/src/vs/workbench/browser/parts/editor/tabsTitleControl.ts b/src/vs/workbench/browser/parts/editor/tabsTitleControl.ts index 153ba1472b6..e331f0e4945 100644 --- a/src/vs/workbench/browser/parts/editor/tabsTitleControl.ts +++ b/src/vs/workbench/browser/parts/editor/tabsTitleControl.ts @@ -268,10 +268,6 @@ export class TabsTitleControl extends TitleControl { }); } - private updateTabHeight(): void { - const tabsContainer = assertIsDefined(this.tabsContainer); - tabsContainer.style.setProperty('--tab-height', `${this.getTabHeight()}px`); - } private getTabsScrollbarSizing(): number { if (this.accessor.partOptions.titleScrollbarSizing !== 'large') { @@ -1558,7 +1554,7 @@ export class TabsTitleControl extends TitleControl { if (this.accessor.partOptions.wrapTabs && this.tabsAndActionsContainer?.classList.contains('wrapping')) { total = this.tabsAndActionsContainer.offsetHeight; } else { - total = this.getTabHeight(); + total = this.tabHeight; } const offset = total; @@ -1571,9 +1567,6 @@ export class TabsTitleControl extends TitleControl { return { total, offset }; } - getTabHeight() { - return this.accessor.partOptions.tabHeight !== 'small' ? 35 : 22; - } layout(dimensions: ITitleControlDimensions, options?: ITabsTitleControlLayoutOptions): Dimension { @@ -1720,7 +1713,7 @@ export class TabsTitleControl extends TitleControl { if (tabsWrapMultiLine) { if ( (tabsContainer.offsetHeight > dimensions.available.height) || // if height exceeds available height - (allTabsWidth === visibleTabsWidth && tabsContainer.offsetHeight === this.getTabHeight()) || // if wrapping is not needed anymore + (allTabsWidth === visibleTabsWidth && tabsContainer.offsetHeight === this.tabHeight) || // if wrapping is not needed anymore (!lastTabFitsWrapped()) // if last tab does not fit anymore ) { updateTabsWrapping(false); diff --git a/src/vs/workbench/browser/parts/editor/titleControl.ts b/src/vs/workbench/browser/parts/editor/titleControl.ts index e020cd99372..352258bb80a 100644 --- a/src/vs/workbench/browser/parts/editor/titleControl.ts +++ b/src/vs/workbench/browser/parts/editor/titleControl.ts @@ -115,7 +115,7 @@ export abstract class TitleControl extends Themable { private renderDropdownAsChildElement: boolean; constructor( - parent: HTMLElement, + protected parent: HTMLElement, protected accessor: IEditorGroupsAccessor, protected group: IEditorGroupView, @IContextMenuService protected readonly contextMenuService: IContextMenuService, @@ -422,6 +422,14 @@ export abstract class TitleControl extends Themable { return keybinding ? keybinding.getLabel() ?? undefined : undefined; } + protected get tabHeight() { + return this.accessor.partOptions.tabHeight !== 'compact' ? 35 : 22; + } + + protected updateTabHeight(): void { + this.parent.style.setProperty('--tab-height', `${this.tabHeight}px`); + } + abstract openEditor(editor: EditorInput): void; abstract openEditors(editors: EditorInput[]): void; diff --git a/src/vs/workbench/browser/workbench.contribution.ts b/src/vs/workbench/browser/workbench.contribution.ts index 85d699dfbf5..1a2d836c0a5 100644 --- a/src/vs/workbench/browser/workbench.contribution.ts +++ b/src/vs/workbench/browser/workbench.contribution.ts @@ -167,7 +167,7 @@ const registry = Registry.as(ConfigurationExtensions.Con }, 'workbench.editor.tabHeight': { 'type': 'string', - 'enum': ['normal', 'small'], + 'enum': ['normal', 'compact'], 'default': 'normal', 'markdownDescription': localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'workbench.editor.tabHeight' }, "Controls the height of editor tabs.") }, diff --git a/src/vs/workbench/common/editor.ts b/src/vs/workbench/common/editor.ts index 9414e6004df..d38c979a477 100644 --- a/src/vs/workbench/common/editor.ts +++ b/src/vs/workbench/common/editor.ts @@ -1098,7 +1098,7 @@ interface IEditorPartConfiguration { tabSizingFixedMinWidth?: number; tabSizingFixedMaxWidth?: number; pinnedTabSizing?: 'normal' | 'compact' | 'shrink'; - tabHeight?: 'normal' | 'small'; + tabHeight?: 'normal' | 'compact'; preventPinnedEditorClose?: PreventPinnedEditorClose; titleScrollbarSizing?: 'default' | 'large'; focusRecentEditorAfterClose?: boolean;