提交 13b6e6d0 编写于 作者: B Benjamin Pasero

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

上级 ae91d665
......@@ -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);
......
......@@ -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:
......
......@@ -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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册