diff --git a/src/vs/workbench/browser/parts/editor/sideBySideEditorControl.ts b/src/vs/workbench/browser/parts/editor/sideBySideEditorControl.ts index 782285231e78bfed638ea05692a6752c1a4ea825..a59595c947eaf234e7df8c097ece0cb37b7b0bcb 100644 --- a/src/vs/workbench/browser/parts/editor/sideBySideEditorControl.ts +++ b/src/vs/workbench/browser/parts/editor/sideBySideEditorControl.ts @@ -1278,10 +1278,15 @@ export class SideBySideEditorControl implements ISideBySideEditorControl, IVerti } }); - // Layout active editors + // Layout visible editors POSITIONS.forEach(position => { this.layoutEditor(position); }); + + // Layout title controls + POSITIONS.forEach(position => { + this.titleAreaControl[position].layout(); + }); } private layoutEditor(position: Position): void { diff --git a/src/vs/workbench/browser/parts/editor/tabsTitleControl.ts b/src/vs/workbench/browser/parts/editor/tabsTitleControl.ts index 4ce0cd0174d0211f8f2118c078f67704090fde1d..4003acc8a749a950308812ccf51a6a47bef9839b 100644 --- a/src/vs/workbench/browser/parts/editor/tabsTitleControl.ts +++ b/src/vs/workbench/browser/parts/editor/tabsTitleControl.ts @@ -30,6 +30,7 @@ import {TitleControl} from 'vs/workbench/browser/parts/editor/titleControl'; export class TabsTitleControl extends TitleControl { private titleContainer: Builder; private tabsContainer: Builder; + private activeTab: Builder; private groupActionsToolbar: ToolBar; private tabActionBars: ActionBar[]; @@ -140,8 +141,6 @@ export class TabsTitleControl extends TitleControl { this.tabActionBars.pop().dispose(); } - let activeTab: HTMLElement; - // Add a tab for each opened editor this.context.getEditors().forEach(editor => { const isPinned = group.isPinned(editor); @@ -163,7 +162,7 @@ export class TabsTitleControl extends TitleControl { // Active state if (isActive) { tab.addClass('active'); - activeTab = tab.getHTMLElement(); + this.activeTab = $(tab); } else { tab.removeClass('active'); } @@ -194,7 +193,16 @@ export class TabsTitleControl extends TitleControl { }); }); + this.layout(); + } + + public layout(): void { + if (!this.activeTab) { + return; + } + // Always reveal the active one + const activeTab = this.activeTab.getHTMLElement(); const container = this.tabsContainer.getHTMLElement(); const containerWidth = container.offsetWidth; const containerScrollPosX = container.scrollLeft; diff --git a/src/vs/workbench/browser/parts/editor/titleControl.ts b/src/vs/workbench/browser/parts/editor/titleControl.ts index 814feff9e85f9ec7f727b5de5615ba1dfa7f8176..534207eb363259b07c6f795b53ca4bea766b1bda 100644 --- a/src/vs/workbench/browser/parts/editor/titleControl.ts +++ b/src/vs/workbench/browser/parts/editor/titleControl.ts @@ -43,6 +43,7 @@ export interface ITitleAreaControl { allowDragging(element: HTMLElement): boolean; create(parent: Builder): void; refresh(): void; + layout(): void; dispose(): void; } @@ -95,6 +96,10 @@ export abstract class TitleControl { public abstract refresh(); + public layout(): void { + // Subclasses can opt in to react on layout + } + public allowDragging(element: HTMLElement): boolean { return !DOM.findParentWithClass(element, 'monaco-action-bar', 'one-editor-container'); }