From 226a865f14b566f559f1b5641da7a64cf923d4ef Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Thu, 16 Nov 2023 15:43:18 +0100 Subject: [PATCH] editors - include preferred name and description in tooltip if available (fix #198204) --- .../common/editor/diffEditorInput.ts | 13 +++++++--- .../common/editor/sideBySideEditorInput.ts | 24 +++++++++++++++++-- .../files/browser/editors/fileEditorInput.ts | 23 ++++++++++++++++++ 3 files changed, 55 insertions(+), 5 deletions(-) diff --git a/src/vs/workbench/common/editor/diffEditorInput.ts b/src/vs/workbench/common/editor/diffEditorInput.ts index df7b77549ad83..1680cdd3d8c00 100644 --- a/src/vs/workbench/common/editor/diffEditorInput.ts +++ b/src/vs/workbench/common/editor/diffEditorInput.ts @@ -115,9 +115,16 @@ export class DiffEditorInput extends SideBySideEditorInput implements IDiffEdito } // Title - const shortTitle = this.computeLabel(this.original.getTitle(Verbosity.SHORT) ?? this.original.getName(), this.modified.getTitle(Verbosity.SHORT) ?? this.modified.getName(), ' ↔ '); - const mediumTitle = this.computeLabel(this.original.getTitle(Verbosity.MEDIUM) ?? this.original.getName(), this.modified.getTitle(Verbosity.MEDIUM) ?? this.modified.getName(), ' ↔ '); - const longTitle = this.computeLabel(this.original.getTitle(Verbosity.LONG) ?? this.original.getName(), this.modified.getTitle(Verbosity.LONG) ?? this.modified.getName(), ' ↔ '); + let shortTitle = this.computeLabel(this.original.getTitle(Verbosity.SHORT) ?? this.original.getName(), this.modified.getTitle(Verbosity.SHORT) ?? this.modified.getName(), ' ↔ '); + let mediumTitle = this.computeLabel(this.original.getTitle(Verbosity.MEDIUM) ?? this.original.getName(), this.modified.getTitle(Verbosity.MEDIUM) ?? this.modified.getName(), ' ↔ '); + let longTitle = this.computeLabel(this.original.getTitle(Verbosity.LONG) ?? this.original.getName(), this.modified.getTitle(Verbosity.LONG) ?? this.modified.getName(), ' ↔ '); + + const preferredTitle = this.getPreferredTitle(); + if (preferredTitle) { + shortTitle = `${preferredTitle} (${shortTitle})`; + mediumTitle = `${preferredTitle} (${mediumTitle})`; + longTitle = `${preferredTitle} (${longTitle})`; + } return { name, shortDescription, mediumDescription, longDescription, forceDescription, shortTitle, mediumTitle, longTitle }; } diff --git a/src/vs/workbench/common/editor/sideBySideEditorInput.ts b/src/vs/workbench/common/editor/sideBySideEditorInput.ts index e852dd7b2bbc2..eab54171e89f6 100644 --- a/src/vs/workbench/common/editor/sideBySideEditorInput.ts +++ b/src/vs/workbench/common/editor/sideBySideEditorInput.ts @@ -128,11 +128,31 @@ export class SideBySideEditorInput extends EditorInput implements ISideBySideEdi } override getTitle(verbosity?: Verbosity): string { + let title: string; if (this.hasIdenticalSides) { - return this.primary.getTitle(verbosity) ?? this.getName(); + title = this.primary.getTitle(verbosity) ?? this.getName(); + } else { + title = super.getTitle(verbosity); } - return super.getTitle(verbosity); + const preferredTitle = this.getPreferredTitle(); + if (preferredTitle) { + title = `${preferredTitle} (${title})`; + } + + return title; + } + + protected getPreferredTitle(): string | undefined { + if (this.preferredName && this.preferredDescription) { + return `${this.preferredName} ${this.preferredDescription}`; + } + + if (this.preferredName || this.preferredDescription) { + return this.preferredName ?? this.preferredDescription; + } + + return undefined; } override getLabelExtraClasses(): string[] { diff --git a/src/vs/workbench/contrib/files/browser/editors/fileEditorInput.ts b/src/vs/workbench/contrib/files/browser/editors/fileEditorInput.ts index 0a0cbcc764d4e..3f4b1910cf49a 100644 --- a/src/vs/workbench/contrib/files/browser/editors/fileEditorInput.ts +++ b/src/vs/workbench/contrib/files/browser/editors/fileEditorInput.ts @@ -217,6 +217,29 @@ export class FileEditorInput extends AbstractTextResourceEditorInput implements return this.preferredDescription; } + override getTitle(verbosity?: Verbosity): string { + let title = super.getTitle(verbosity); + + const preferredTitle = this.getPreferredTitle(); + if (preferredTitle) { + title = `${preferredTitle} (${title})`; + } + + return title; + } + + protected getPreferredTitle(): string | undefined { + if (this.preferredName && this.preferredDescription) { + return `${this.preferredName} ${this.preferredDescription}`; + } + + if (this.preferredName || this.preferredDescription) { + return this.preferredName ?? this.preferredDescription; + } + + return undefined; + } + getEncoding(): string | undefined { if (this.model) { return this.model.getEncoding();