Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add accessibility verbosity settings for terminal and diff editor aria hints #180365

Merged
merged 6 commits into from
Apr 20, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions build/lib/i18n.resources.json
Original file line number Diff line number Diff line change
Expand Up @@ -513,6 +513,10 @@
{
"name": "vs/workbench/services/localization",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/accessibility",
"project": "vscode-workbench"
}
]
}
24 changes: 20 additions & 4 deletions src/vs/editor/browser/widget/diffEditorWidget.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ import { defaultInsertColor, defaultRemoveColor, diffDiagonalFill, diffInserted,
import { registerIcon } from 'vs/platform/theme/common/iconRegistry';
import { getThemeTypeSelector, IColorTheme, IThemeService, registerThemingParticipant } from 'vs/platform/theme/common/themeService';
import { ThemeIcon } from 'vs/base/common/themables';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';

export interface IDiffCodeEditorWidgetOptions {
originalEditor?: ICodeEditorWidgetOptions;
Expand Down Expand Up @@ -249,11 +250,16 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE
@IThemeService themeService: IThemeService,
@INotificationService notificationService: INotificationService,
@IContextMenuService contextMenuService: IContextMenuService,
@IEditorProgressService private readonly _editorProgressService: IEditorProgressService
@IEditorProgressService private readonly _editorProgressService: IEditorProgressService,
@IConfigurationService private readonly _configurationService: IConfigurationService
) {
super();
codeEditorService.willCreateDiffEditor();

this._register(this._configurationService.onDidChangeConfiguration(e => {
if (e.affectsConfiguration('accessibility.verbosity.diff-editor')) {
this.updateOptions(this._options);
}
}));
this._documentDiffProvider = this._register(instantiationService.createInstance(WorkerBasedDocumentDiffProvider, options));
this._register(this._documentDiffProvider.onDidChange(e => this._beginUpdateDecorationsSoon()));

Expand Down Expand Up @@ -1272,7 +1278,7 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE
if (options.originalAriaLabel) {
result.ariaLabel = options.originalAriaLabel;
}
result.ariaLabel += ariaNavigationTip;
this._updateAriaLabel(result);
result.readOnly = !this._options.originalEditable;
result.dropIntoEditor = { enabled: !result.readOnly };
result.extraEditorClassName = 'original-in-monaco-diff-editor';
Expand All @@ -1285,12 +1291,22 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE
};
}

private _updateAriaLabel(options: IEditorConstructionOptions): void {
let ariaLabel = options.ariaLabel;
if (this._configurationService.getValue('accessibility.verbosity.diff-editor')) {
ariaLabel += ariaNavigationTip;
} else if (ariaLabel) {
ariaLabel = ariaLabel.replaceAll(ariaNavigationTip, '');
}
options.ariaLabel = ariaLabel;
}

private _adjustOptionsForRightHandSide(options: Readonly<editorBrowser.IDiffEditorConstructionOptions>): IEditorConstructionOptions {
const result = this._adjustOptionsForSubEditor(options);
if (options.modifiedAriaLabel) {
result.ariaLabel = options.modifiedAriaLabel;
}
result.ariaLabel += ariaNavigationTip;
this._updateAriaLabel(result);
result.wordWrapOverride1 = this._options.diffWordWrap;
result.revealHorizontalRightPadding = EditorOptions.revealHorizontalRightPadding.defaultValue + DiffEditorWidget.ENTIRE_DIFF_OVERVIEW_WIDTH;
result.scrollbar!.verticalHasArrows = false;
Expand Down
4 changes: 3 additions & 1 deletion src/vs/editor/browser/widget/embeddedCodeEditorWidget.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService
import { IEditorProgressService } from 'vs/platform/progress/common/progress';
import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry';
import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';

export class EmbeddedCodeEditorWidget extends CodeEditorWidget {

Expand Down Expand Up @@ -85,8 +86,9 @@ export class EmbeddedDiffEditorWidget extends DiffEditorWidget {
@IContextMenuService contextMenuService: IContextMenuService,
@IClipboardService clipboardService: IClipboardService,
@IEditorProgressService editorProgressService: IEditorProgressService,
@IConfigurationService configurationService: IConfigurationService
) {
super(domElement, parentEditor.getRawOptions(), codeEditorWidgetOptions, clipboardService, contextKeyService, instantiationService, codeEditorService, themeService, notificationService, contextMenuService, editorProgressService);
super(domElement, parentEditor.getRawOptions(), codeEditorWidgetOptions, clipboardService, contextKeyService, instantiationService, codeEditorService, themeService, notificationService, contextMenuService, editorProgressService, configurationService);

this._parentEditor = parentEditor;
this._overwriteOptions = options;
Expand Down
8 changes: 4 additions & 4 deletions src/vs/editor/standalone/browser/standaloneCodeEditor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -481,7 +481,7 @@ export class StandaloneEditor extends StandaloneCodeEditor implements IStandalon

export class StandaloneDiffEditor extends DiffEditorWidget implements IStandaloneDiffEditor {

private readonly _configurationService: IConfigurationService;
private readonly _updatedConfigurationService: IConfigurationService;
private readonly _standaloneThemeService: IStandaloneThemeService;

constructor(
Expand All @@ -507,9 +507,9 @@ export class StandaloneDiffEditor extends DiffEditorWidget implements IStandalon
themeService.setAutoDetectHighContrast(Boolean(options.autoDetectHighContrast));
}

super(domElement, options, {}, clipboardService, contextKeyService, instantiationService, codeEditorService, themeService, notificationService, contextMenuService, editorProgressService);
super(domElement, options, {}, clipboardService, contextKeyService, instantiationService, codeEditorService, themeService, notificationService, contextMenuService, editorProgressService, configurationService);

this._configurationService = configurationService;
this._updatedConfigurationService = configurationService;
this._standaloneThemeService = themeService;

this._register(themeDomRegistration);
Expand All @@ -520,7 +520,7 @@ export class StandaloneDiffEditor extends DiffEditorWidget implements IStandalon
}

public override updateOptions(newOptions: Readonly<IDiffEditorOptions & IGlobalEditorOptions>): void {
updateConfigurationService(this._configurationService, newOptions, true);
updateConfigurationService(this._updatedConfigurationService, newOptions, true);
if (typeof newOptions.theme === 'string') {
this._standaloneThemeService.setTheme(newOptions.theme);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -463,7 +463,6 @@ class ConfigurationRegistry implements IConfigurationRegistry {
}

private doRegisterConfigurations(configurations: IConfigurationNode[], validate: boolean, bucket: Set<string>): void {

configurations.forEach(configuration => {

this.validateAndRegisterProperties(configuration, validate, configuration.extensionInfo, configuration.restrictedProperties, undefined, bucket);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/

import { registerAccessibilityConfiguration } from 'vs/workbench/contrib/accessibility/browser/accessibilityContribution';

registerAccessibilityConfiguration();
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/

import { localize } from 'vs/nls';
import { Extensions, IConfigurationNode, IConfigurationRegistry } from 'vs/platform/configuration/common/configurationRegistry';
import { Registry } from 'vs/platform/registry/common/platform';

const configuration: IConfigurationNode = {
id: 'accessibility',
title: localize('accessibilityConfigurationTitle', "Accessibility"),
type: 'object',
properties: {
'accessibility.verbosity.terminal': {
description: localize('verbosity.terminal.description', 'Provide information about how to access the terminal accessibility help menu when the terminal is focused'),
type: 'boolean',
default: true,
tags: ['accessibility']
},
'accessibility.verbosity.diff-editor': {
description: localize('verbosity.diff-editor.description', 'Provide information about how to navigate changes in the diff editor when it is focused'),
type: 'boolean',
default: true,
tags: ['accessibility']
}
}
};

export function registerAccessibilityConfiguration() {
const configurationRegistry = Registry.as<IConfigurationRegistry>(Extensions.Configuration);
configurationRegistry.registerConfiguration(configuration);
}
Original file line number Diff line number Diff line change
Expand Up @@ -523,6 +523,9 @@ export class TerminalInstance extends Disposable implements ITerminalInstance {
});

this._register(this._configurationService.onDidChangeConfiguration(async e => {
if (e.affectsConfiguration('accessibility.verbosity.terminal')) {
this._setAriaLabel(this.xterm?.raw, this._instanceId, this.title);
}
if (e.affectsConfiguration('terminal.integrated')) {
this.updateConfig();
this.setVisible(this._isVisible);
Expand Down Expand Up @@ -1941,7 +1944,7 @@ export class TerminalInstance extends Disposable implements ITerminalInstance {
labelParts.push(nls.localize('terminalScreenReaderMode', "Run the command: Toggle Screen Reader Accessibility Mode for an optimized screen reader experience"));
}
const accessibilityHelpKeybinding = this._keybindingService.lookupKeybinding(TerminalCommandId.ShowTerminalAccessibilityHelp)?.getLabel();
if (accessibilityHelpKeybinding) {
if (this._configurationService.getValue('accessibility.verbosity.terminal') && accessibilityHelpKeybinding) {
labelParts.push(nls.localize('terminalHelpAriaLabel', "Use {0} for terminal accessibility help", accessibilityHelpKeybinding));
}
xterm.textarea.setAttribute('aria-label', labelParts.join('\n'));
Expand Down
3 changes: 3 additions & 0 deletions src/vs/workbench/workbench.common.main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -362,4 +362,7 @@ import 'vs/workbench/contrib/deprecatedExtensionMigrator/browser/deprecatedExten
// Bracket Pair Colorizer 2 Telemetry
import 'vs/workbench/contrib/bracketPairColorizer2Telemetry/browser/bracketPairColorizer2Telemetry.contribution';

// Accessibility
import 'vs/workbench/contrib/accessibility/browser/accessibility.contribution';

//#endregion