From 13b6e6d096c479f4174d025d647385054b1e43d7 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Wed, 10 Aug 2016 07:32:20 +0200 Subject: [PATCH] Opening already opened editor should update its title (fixes #9794) --- .../browser/parts/editor/editorPart.ts | 4 ++++ .../parts/editor/sideBySideEditorControl.ts | 6 ++++++ .../browser/parts/editor/tabsTitleControl.ts | 19 +++++++++++++------ 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/vs/workbench/browser/parts/editor/editorPart.ts b/src/vs/workbench/browser/parts/editor/editorPart.ts index bc2d6ee85ee..ef66b40513c 100644 --- a/src/vs/workbench/browser/parts/editor/editorPart.ts +++ b/src/vs/workbench/browser/parts/editor/editorPart.ts @@ -239,6 +239,10 @@ export class EditorPart extends Part implements IEditorPart, IEditorGroupService const active = (group.count === 0) || !options || !options.inactive; group.openEditor(input, { active, pinned, index: options && options.index }); + // indicate to the UI that an editor is about to open. we need to update the title because it could be that + // the input is already opened but the title has changed and the UI should reflect that + this.sideBySideControl.updateTitle({ group, editor: input }); + // Return early if the editor is to be open inactive and there are other editors in this group to show if (!active) { return TPromise.as(null); diff --git a/src/vs/workbench/browser/parts/editor/sideBySideEditorControl.ts b/src/vs/workbench/browser/parts/editor/sideBySideEditorControl.ts index 7844840b413..7cf4f44beb5 100644 --- a/src/vs/workbench/browser/parts/editor/sideBySideEditorControl.ts +++ b/src/vs/workbench/browser/parts/editor/sideBySideEditorControl.ts @@ -69,6 +69,8 @@ export interface ISideBySideEditorControl { isDragging(): boolean; + updateTitle(identifier: IEditorIdentifier): void; + getInstantiationService(position: Position): IInstantiationService; getProgressBar(position: Position): ProgressBar; updateProgress(position: Position, state: ProgressState): void; @@ -1692,6 +1694,10 @@ export class SideBySideEditorControl implements ISideBySideEditorControl, IVerti return this.silos[position].child().getProperty(key); } + public updateTitle(identifier: IEditorIdentifier): void { + this.onStacksChanged({ editor: identifier.editor, group: identifier.group }); + } + public updateProgress(position: Position, state: ProgressState): void { switch (state) { case ProgressState.INFINITE: diff --git a/src/vs/workbench/browser/parts/editor/tabsTitleControl.ts b/src/vs/workbench/browser/parts/editor/tabsTitleControl.ts index a4cc93b44cb..034cbbc4efa 100644 --- a/src/vs/workbench/browser/parts/editor/tabsTitleControl.ts +++ b/src/vs/workbench/browser/parts/editor/tabsTitleControl.ts @@ -178,14 +178,24 @@ export class TabsTitleControl extends TitleControl { DOM.removeClass(this.titleContainer, 'active'); } - // Tab styles + // Tab label and styles this.context.getEditors().forEach((editor, index) => { const tabContainer = this.tabsContainer.children[index]; if (tabContainer instanceof HTMLElement) { + const tabLabel = (tabContainer.children[0]).children[0]; + const isPinned = group.isPinned(editor); const isActive = group.isActive(editor); const isDirty = editor.isDirty(); + const description = editor.getDescription(true) || ''; + const name = editor.getName(); + + // Label & Description + tabContainer.setAttribute('aria-label', `tab, ${name}`); + tabContainer.title = description; + tabLabel.innerText = name; + // Pinned state if (isPinned) { DOM.addClass(tabContainer, 'pinned'); @@ -233,7 +243,7 @@ export class TabsTitleControl extends TitleControl { // Refresh Tabs this.refreshTabs(group); - // Update styles + // Update Tabs this.doUpdate(); } @@ -252,14 +262,12 @@ export class TabsTitleControl extends TitleControl { // Add a tab for each opened editor this.context.getEditors().forEach(editor => { - const description = editor.getDescription(true) || ''; + // Tab Container const tabContainer = document.createElement('div'); - tabContainer.title = description; tabContainer.draggable = true; tabContainer.tabIndex = 0; tabContainer.setAttribute('role', 'presentation'); // cannot use role "tab" here due to https://github.com/Microsoft/vscode/issues/8659 - tabContainer.setAttribute('aria-label', `tab, ${editor.getName()}`); DOM.addClass(tabContainer, 'tab monaco-editor-background'); tabContainers.push(tabContainer); @@ -270,7 +278,6 @@ export class TabsTitleControl extends TitleControl { // Tab Label const tabLabel = document.createElement('a'); - tabLabel.innerText = editor.getName(); tabLabelContainer.appendChild(tabLabel); // Tab Close