未验证 提交 3074fd58 编写于 作者: L Logan Ramos 提交者: GitHub

Makes custom dialogs match native dialogs on Windows + Mac (#74005)

Fixes #71251 
上级 15a0e88d
......@@ -15,6 +15,7 @@ import { ButtonGroup, IButtonStyles } from 'vs/base/browser/ui/button/button';
import { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar';
import { Action } from 'vs/base/common/actions';
import { mnemonicButtonLabel } from 'vs/base/common/labels';
import { isMacintosh } from 'vs/base/common/platform';
export interface IDialogOptions {
cancelId?: number;
......@@ -30,6 +31,11 @@ export interface IDialogStyles extends IButtonStyles {
dialogBorder?: Color;
}
interface ButtonMapEntry {
label: string;
index: number;
}
export class Dialog extends Disposable {
private element: HTMLElement | undefined;
private modal: HTMLElement | undefined;
......@@ -92,12 +98,13 @@ export class Dialog extends Disposable {
let focusedButton = 0;
this.buttonGroup = new ButtonGroup(this.buttonsContainer, this.buttons.length, { title: true });
const buttonMap = this.rearrangeButtons(this.buttons, this.options.cancelId);
this.buttonGroup.buttons.forEach((button, index) => {
button.label = mnemonicButtonLabel(this.buttons[index], true);
button.label = mnemonicButtonLabel(buttonMap[index].label, true);
this._register(button.onDidClick(e => {
EventHelper.stop(e);
resolve(index);
resolve(buttonMap[index].index);
}));
});
......@@ -228,4 +235,22 @@ export class Dialog extends Disposable {
this.focusToReturn = undefined;
}
}
private rearrangeButtons(buttons: Array<string>, cancelId: number | undefined): ButtonMapEntry[] {
const buttonMap: ButtonMapEntry[] = [];
// Maps each button to its current label and old index so that when we move them around it's not a problem
buttons.forEach((button, index) => {
buttonMap.push({ label: button, index: index });
});
if (isMacintosh) {
if (cancelId !== undefined) {
const cancelButton = buttonMap.splice(cancelId, 1)[0];
buttonMap.reverse();
buttonMap.splice(buttonMap.length - 1, 0, cancelButton);
}
}
return buttonMap;
}
}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册