diff --git a/src/vs/vscode.d.ts b/src/vs/vscode.d.ts index 4b1673efdc6..6e349efdc7e 100644 --- a/src/vs/vscode.d.ts +++ b/src/vs/vscode.d.ts @@ -1860,6 +1860,12 @@ declare module 'vscode' { * Indicates that this message should be modal. */ modal?: boolean; + + /** + * Human-readable detail message that is rendered less prominent. _Note_ that detail + * is only shown for {@link MessageOptions.modal modal} messages. + */ + detail?: string; } /** diff --git a/src/vs/workbench/api/browser/mainThreadMessageService.ts b/src/vs/workbench/api/browser/mainThreadMessageService.ts index f61b2cd5ec0..aaf480f8b67 100644 --- a/src/vs/workbench/api/browser/mainThreadMessageService.ts +++ b/src/vs/workbench/api/browser/mainThreadMessageService.ts @@ -33,7 +33,7 @@ export class MainThreadMessageService implements MainThreadMessageServiceShape { $showMessage(severity: Severity, message: string, options: MainThreadMessageOptions, commands: { title: string; isCloseAffordance: boolean; handle: number; }[]): Promise { if (options.modal) { - return this._showModalMessage(severity, message, commands, options.useCustom); + return this._showModalMessage(severity, message, options.detail, commands, options.useCustom); } else { return this._showMessage(severity, message, commands, options.extension); } @@ -100,7 +100,7 @@ export class MainThreadMessageService implements MainThreadMessageServiceShape { }); } - private async _showModalMessage(severity: Severity, message: string, commands: { title: string; isCloseAffordance: boolean; handle: number; }[], useCustom?: boolean): Promise { + private async _showModalMessage(severity: Severity, message: string, detail: string | undefined, commands: { title: string; isCloseAffordance: boolean; handle: number; }[], useCustom?: boolean): Promise { let cancelId: number | undefined = undefined; const buttons = commands.map((command, index) => { @@ -121,7 +121,7 @@ export class MainThreadMessageService implements MainThreadMessageServiceShape { cancelId = buttons.length - 1; } - const { choice } = await this._dialogService.show(severity, message, buttons, { cancelId, custom: useCustom }); + const { choice } = await this._dialogService.show(severity, message, buttons, { cancelId, custom: useCustom, detail }); return choice === commands.length ? undefined : commands[choice].handle; } } diff --git a/src/vs/workbench/api/common/extHost.protocol.ts b/src/vs/workbench/api/common/extHost.protocol.ts index 74fe7b5b4c0..333888d4a87 100644 --- a/src/vs/workbench/api/common/extHost.protocol.ts +++ b/src/vs/workbench/api/common/extHost.protocol.ts @@ -423,6 +423,7 @@ export interface MainThreadLanguagesShape extends IDisposable { export interface MainThreadMessageOptions { extension?: IExtensionDescription; modal?: boolean; + detail?: string; useCustom?: boolean; } diff --git a/src/vs/workbench/api/common/extHostMessageService.ts b/src/vs/workbench/api/common/extHostMessageService.ts index 847a27a2b5e..9f36d8dd3ac 100644 --- a/src/vs/workbench/api/common/extHostMessageService.ts +++ b/src/vs/workbench/api/common/extHostMessageService.ts @@ -37,8 +37,9 @@ export class ExtHostMessageService { if (typeof optionsOrFirstItem === 'string' || isMessageItem(optionsOrFirstItem)) { items = [optionsOrFirstItem, ...rest]; } else { - options.modal = optionsOrFirstItem && optionsOrFirstItem.modal; - options.useCustom = optionsOrFirstItem && optionsOrFirstItem.useCustom; + options.modal = optionsOrFirstItem?.modal; + options.useCustom = optionsOrFirstItem?.useCustom; + options.detail = optionsOrFirstItem?.detail; items = rest; }