Change:
<!-- Do Not Delete This! bugreporttemplate --<!-- Please read our Rules of Conduct: --<!-- Read our guide about submitting issues: --<!-- Search existing issues to avoid creating duplicates. --<!-- Test using the latest Insiders build to see if your issue has already been fixed: --<!-- Instead of creating your report here, use 'Report Issue' from the 'Help' menu in VS Code to pre-fill useful information. --- VS Code Version: 1.55.0 stable OS Version: Windows Steps to Reproduce: to explorer pane on dots in the top right of the tree view. couple items in the list ( leave some of them as checked) Narrator app trough same list and see Narrator should read "unchecked" status. Actual : Narrator only reads "checked" status of the item. If the item is "unchecked" narrator doesn't read the status Expected: Narrator should read the status as "unchecked" for unchecked items as well. ! <!-- Launch with to check. --Does this issue occur when all extensions are disabled?: Yes <!-- If you answered No above, use 'Help: Start Extension Bisect' from Command Palette to try to identify the cause. --<!-- Issues caused by an extension need to be reported direct to the extension publisher. The 'Help Report Issue' dialog can assist with this. --
(Experimental duplicate detection) Thanks for submitting this issue. Please also check if it is already covered by an existing one, like: <!-- score: 0.462 --<!-- potentialduplicatescomment --
, the bug is assigned to us from Accessibility team but I believe root cause is coming from vs code.
I believe this is as designed behavior by Narrator. Narrator simply decides to not read out the when the item is unchecked. I see you nicely set the do you face the same issue with NVDA? How about if you go the the breakpoints view and you uncheck a breakpoint?
, yes, NVDA also doesn't read "unchecked" status, but there is no problem on break points. It reads that "breakpoint is " or "breakpoint is removed".
thanks. I just checked this and I believe that you do not put for unchecked items in the custom menu. Can you please double check this? Thanks
I think what's happening is that when the menu item is not checked, we set the value to but we also set the role to which probably tells the screen reader that is not important. I don't think we know if an action is toggleable, we just know if it is checked. I will have to update the action to be aware that it is unchecked an can be checked to label it properly
good point. They should have a role "checkbox" if they can be checked off. We do the same for the breakpoints and the list should support this. Just an example here's how I do it for breakpoints
Note that as long as at least one state is shown (preferrably checked), then not necessary to show the other, although would be nice to confirm it's a boolean. explorer view output view search view run view SCM CTRL view debug console terminal word wrap Views / modes that do report checked status: minimap show breadcrumbs render whitespace render control characters
Can't seem to edit comments here... All the views mentioned in previous comment refer to entries in the global view menu.
thanks. I think we have found the root cause of the issue and we plan to look into it. let me know if I can help here.
ok I looked at the code and now I understand fully what you meant, you need to know if an action is as you said. I have just verified with NVDA that this would indeed fix the issue, so we need to set only for items that are checkable.
Hi , the accessibility team wants us to give fix date estimate on this ? Do you have an approx.. estimate when would it be fixed ?
Could you please help us with the estimate date to fix this issue
This is currently assigned to September which means we would like to fix it in September. Though it might get moved to October. So rough estimate: in the next couple of months.
GitHubTags:#A11yTCS;#Win32;#DesktopApp;#A11yVSCode;#WCAG4.2.2;#A11ySev2;#CAITestPassMay2020;#Visual Studio Code;#NVDA;#A11yMAS;#Narrator;

Discussion:
super(context, action, options); this.checkbox = this._register(new Checkbox({ actionClassName: this._action.class, <del> isChecked: this._action.checked, </del> <ins> isChecked: !!this._action.checked, </ins> title: (<IActionViewItemOptions>this.options).keybinding ? `${this._action.label} (${(<IActionViewItemOptions>this.options).keybinding})` : this._action.label, notFocusable: true }));

} override updateChecked(): void { <del> this.checkbox.checked = this._action.checked; </del> <ins> this.checkbox.checked = !!this._action.checked; </ins> } override focus(): void {

return; } <del> if (this.getAction().checked) { this.item.classList.add('checked'); </del> <ins> const checked = this.getAction().checked; this.item.classList.toggle('checked', !!checked); if (checked !== undefined) { </ins> this.item.setAttribute('role', 'menuitemcheckbox'); <del> this.item.setAttribute('aria-checked', 'true'); </del> <ins> this.item.setAttribute('aria-checked', checked ? 'true' : 'false'); </ins> } else { <del> this.item.classList.remove('checked'); </del> this.item.setAttribute('role', 'menuitem'); <del> this.item.setAttribute('aria-checked', 'false'); </del> <ins> this.item.setAttribute('aria-checked', ''); </ins> } }

tooltip: string; class: string | undefined; enabled: boolean; <del> checked: boolean; </del> <ins> checked?: boolean; </ins> run(event?: unknown): unknown; }

protected _tooltip: string | undefined; protected _cssClass: string | undefined; protected _enabled: boolean = true; <del> protected _checked: boolean = false; </del> <ins> protected _checked?: boolean; </ins> protected readonly _actionCallback?: (event?: unknown) => unknown; constructor(id: string, label: string = '', cssClass: string = '', enabled: boolean = true, actionCallback?: (event?: unknown) => unknown) {

} } <del> get checked(): boolean { </del> <ins> get checked(): boolean | undefined { </ins> return this._checked; } <del> set checked(value: boolean) { </del> <ins> set checked(value: boolean | undefined) { </ins> this._setChecked(value); } <del> protected _setChecked(value: boolean): void { </del> <ins> protected _setChecked(value: boolean | undefined): void { </ins> if (this._checked !== value) { this._checked = value; this._onDidChange.fire({ checked: value });

readonly tooltip: string; readonly class: string | undefined; readonly enabled: boolean; <del> readonly checked: boolean; </del> <ins> readonly checked?: boolean; </ins> constructor( item: ICommandAction,

: (typeof item.title === 'string' ? item.title : item.title.value); this.tooltip = (typeof item.tooltip === 'string' ? item.tooltip : item.tooltip?.value) ?? ''; this.enabled = !item.precondition || contextKeyService.contextMatchesRules(item.precondition); <del> this.checked = false; </del> <ins> this.checked = undefined; </ins> if (item.toggled) { const toggled = ((item.toggled as { condition: ContextKeyExpression }).condition ? item.toggled : { condition: item.toggled }) as {