Opening already opened editor should update its title (fixes #9794)

This commit is contained in:
Benjamin Pasero 2016-08-10 07:32:20 +02:00
parent ae91d66546
commit 13b6e6d096
3 changed files with 23 additions and 6 deletions

View file

@ -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<BaseEditor>(null);

View file

@ -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:

View file

@ -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 = <HTMLAnchorElement>(<HTMLElement>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