Skip to content

Commit f21c1a3

Browse files
authored
make checked optional on IAction (microsoft#135605)
1 parent d209aa2 commit f21c1a3

File tree

4 files changed

+14
-14
lines changed

4 files changed

+14
-14
lines changed

src/vs/base/browser/ui/checkbox/checkbox.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ export class CheckboxActionViewItem extends BaseActionViewItem {
4747
super(context, action, options);
4848
this.checkbox = this._register(new Checkbox({
4949
actionClassName: this._action.class,
50-
isChecked: this._action.checked,
50+
isChecked: !!this._action.checked,
5151
title: (<IActionViewItemOptions>this.options).keybinding ? `${this._action.label} (${(<IActionViewItemOptions>this.options).keybinding})` : this._action.label,
5252
notFocusable: true
5353
}));
@@ -70,7 +70,7 @@ export class CheckboxActionViewItem extends BaseActionViewItem {
7070
}
7171

7272
override updateChecked(): void {
73-
this.checkbox.checked = this._action.checked;
73+
this.checkbox.checked = !!this._action.checked;
7474
}
7575

7676
override focus(): void {

src/vs/base/browser/ui/menu/menu.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -679,14 +679,14 @@ class BaseMenuActionViewItem extends BaseActionViewItem {
679679
return;
680680
}
681681

682-
if (this.getAction().checked) {
683-
this.item.classList.add('checked');
682+
const checked = this.getAction().checked;
683+
this.item.classList.toggle('checked', !!checked);
684+
if (checked !== undefined) {
684685
this.item.setAttribute('role', 'menuitemcheckbox');
685-
this.item.setAttribute('aria-checked', 'true');
686+
this.item.setAttribute('aria-checked', checked ? 'true' : 'false');
686687
} else {
687-
this.item.classList.remove('checked');
688688
this.item.setAttribute('role', 'menuitem');
689-
this.item.setAttribute('aria-checked', 'false');
689+
this.item.setAttribute('aria-checked', '');
690690
}
691691
}
692692

src/vs/base/common/actions.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ export interface IAction extends IDisposable {
2929
tooltip: string;
3030
class: string | undefined;
3131
enabled: boolean;
32-
checked: boolean;
32+
checked?: boolean;
3333
run(event?: unknown): unknown;
3434
}
3535

@@ -58,7 +58,7 @@ export class Action extends Disposable implements IAction {
5858
protected _tooltip: string | undefined;
5959
protected _cssClass: string | undefined;
6060
protected _enabled: boolean = true;
61-
protected _checked: boolean = false;
61+
protected _checked?: boolean;
6262
protected readonly _actionCallback?: (event?: unknown) => unknown;
6363

6464
constructor(id: string, label: string = '', cssClass: string = '', enabled: boolean = true, actionCallback?: (event?: unknown) => unknown) {
@@ -134,15 +134,15 @@ export class Action extends Disposable implements IAction {
134134
}
135135
}
136136

137-
get checked(): boolean {
137+
get checked(): boolean | undefined {
138138
return this._checked;
139139
}
140140

141-
set checked(value: boolean) {
141+
set checked(value: boolean | undefined) {
142142
this._setChecked(value);
143143
}
144144

145-
protected _setChecked(value: boolean): void {
145+
protected _setChecked(value: boolean | undefined): void {
146146
if (this._checked !== value) {
147147
this._checked = value;
148148
this._onDidChange.fire({ checked: value });

src/vs/platform/actions/common/actions.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -402,7 +402,7 @@ export class MenuItemAction implements IAction {
402402
readonly tooltip: string;
403403
readonly class: string | undefined;
404404
readonly enabled: boolean;
405-
readonly checked: boolean;
405+
readonly checked?: boolean;
406406

407407
constructor(
408408
item: ICommandAction,
@@ -417,7 +417,7 @@ export class MenuItemAction implements IAction {
417417
: (typeof item.title === 'string' ? item.title : item.title.value);
418418
this.tooltip = (typeof item.tooltip === 'string' ? item.tooltip : item.tooltip?.value) ?? '';
419419
this.enabled = !item.precondition || contextKeyService.contextMatchesRules(item.precondition);
420-
this.checked = false;
420+
this.checked = undefined;
421421

422422
if (item.toggled) {
423423
const toggled = ((item.toggled as { condition: ContextKeyExpression }).condition ? item.toggled : { condition: item.toggled }) as {

0 commit comments

Comments
 (0)