Skip to content

Commit c8ad3f5

Browse files
committed
Fixes microsoft#27813: Add editor option to forcefully enable/disable accessibility support
1 parent 45e3345 commit c8ad3f5

3 files changed

Lines changed: 38 additions & 3 deletions

File tree

src/vs/editor/common/config/commonEditorConfig.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -551,6 +551,17 @@ const editorConfiguration: IConfigurationNode = {
551551
'default': EDITOR_DEFAULTS.dragAndDrop,
552552
'description': nls.localize('dragAndDrop', "Controls if the editor should allow to move selections via drag and drop.")
553553
},
554+
'editor.accessibilitySupport': {
555+
'type': 'string',
556+
'enum': ['auto', 'on', 'off'],
557+
'enumDescriptions': [
558+
nls.localize('accessibilitySupport.auto', "The editor will use platform APIs to detect when a Screen Reader is attached."),
559+
nls.localize('accessibilitySupport.on', "The editor will be permanently optimized for usage with a Screen Reader."),
560+
nls.localize('accessibilitySupport.off', "The editor will never be optimized for usage with a Screen Reader."),
561+
],
562+
'default': EDITOR_DEFAULTS.accessibilitySupport,
563+
'description': nls.localize('accessibilitySupport', "Controls whether the editor should run in a mode where it is optimized for screen readers.")
564+
},
554565
'diffEditor.renderSideBySide': {
555566
'type': 'boolean',
556567
'default': true,

src/vs/editor/common/config/editorOptions.ts

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,11 @@ export interface IEditorOptions {
336336
* Defaults to 'alt'
337337
*/
338338
multiCursorModifier?: 'ctrlCmd' | 'alt';
339+
/**
340+
* Configure the editor's accessibility support.
341+
* Defaults to 'auto'. It is best to leave this to 'auto'.
342+
*/
343+
accessibilitySupport?: 'auto' | 'off' | 'on';
339344
/**
340345
* Enable quick suggestions (shadow suggestions)
341346
* Defaults to true.
@@ -789,6 +794,7 @@ export interface IValidatedEditorOptions {
789794
readonly emptySelectionClipboard: boolean;
790795
readonly useTabStops: boolean;
791796
readonly multiCursorModifier: 'altKey' | 'ctrlKey' | 'metaKey';
797+
readonly accessibilitySupport: 'auto' | 'off' | 'on';
792798

793799
readonly viewInfo: InternalEditorViewOptions;
794800
readonly contribInfo: EditorContribOptions;
@@ -1429,6 +1435,7 @@ export class EditorOptionsValidator {
14291435
emptySelectionClipboard: _boolean(opts.emptySelectionClipboard, defaults.emptySelectionClipboard),
14301436
useTabStops: _boolean(opts.useTabStops, defaults.useTabStops),
14311437
multiCursorModifier: multiCursorModifier,
1438+
accessibilitySupport: _stringSet<'auto' | 'on' | 'off'>(opts.accessibilitySupport, defaults.accessibilitySupport, ['auto', 'on', 'off']),
14321439
viewInfo: viewInfo,
14331440
contribInfo: contribInfo,
14341441
};
@@ -1653,6 +1660,7 @@ export class InternalEditorOptionsFactory {
16531660
emptySelectionClipboard: opts.emptySelectionClipboard,
16541661
useTabStops: opts.useTabStops,
16551662
multiCursorModifier: opts.multiCursorModifier,
1663+
accessibilitySupport: opts.accessibilitySupport,
16561664

16571665
viewInfo: {
16581666
extraEditorClassName: opts.viewInfo.extraEditorClassName,
@@ -1718,9 +1726,19 @@ export class InternalEditorOptionsFactory {
17181726

17191727
public static createInternalEditorOptions(env: IEnvironmentalOptions, _opts: IValidatedEditorOptions) {
17201728

1729+
let accessibilitySupport: platform.AccessibilitySupport;
1730+
if (_opts.accessibilitySupport === 'auto') {
1731+
// The editor reads the `accessibilitySupport` from the environment
1732+
accessibilitySupport = env.accessibilitySupport;
1733+
} else if (_opts.accessibilitySupport === 'on') {
1734+
accessibilitySupport = platform.AccessibilitySupport.Enabled;
1735+
} else {
1736+
accessibilitySupport = platform.AccessibilitySupport.Disabled;
1737+
}
1738+
17211739
// Disable some non critical features to get as best performance as possible
17221740
// See https://github.com/Microsoft/vscode/issues/26730
1723-
const opts = this._handlePerformanceCritical(_opts, (env.accessibilitySupport === platform.AccessibilitySupport.Enabled));
1741+
const opts = this._handlePerformanceCritical(_opts, (accessibilitySupport === platform.AccessibilitySupport.Enabled));
17241742

17251743
let lineDecorationsWidth: number;
17261744
if (typeof opts.lineDecorationsWidth === 'string' && /^\d+(\.\d+)?ch$/.test(opts.lineDecorationsWidth)) {
@@ -1760,7 +1778,7 @@ export class InternalEditorOptionsFactory {
17601778
const wordWrapColumn = opts.wordWrapColumn;
17611779
const wordWrapMinified = opts.wordWrapMinified;
17621780

1763-
if (env.accessibilitySupport === platform.AccessibilitySupport.Enabled) {
1781+
if (accessibilitySupport === platform.AccessibilitySupport.Enabled) {
17641782
// See https://github.com/Microsoft/vscode/issues/27766
17651783
// Never enable wrapping when a screen reader is attached
17661784
// because arrow down etc. will not move the cursor in the way
@@ -1838,7 +1856,7 @@ export class InternalEditorOptionsFactory {
18381856
editorClassName: className,
18391857
lineHeight: env.fontInfo.lineHeight,
18401858
readOnly: opts.readOnly,
1841-
accessibilitySupport: env.accessibilitySupport,
1859+
accessibilitySupport: accessibilitySupport,
18421860
multiCursorModifier: opts.multiCursorModifier,
18431861
wordSeparators: opts.wordSeparators,
18441862
autoClosingBrackets: opts.autoClosingBrackets,
@@ -2059,6 +2077,7 @@ export const EDITOR_DEFAULTS: IValidatedEditorOptions = {
20592077
emptySelectionClipboard: true,
20602078
useTabStops: true,
20612079
multiCursorModifier: 'altKey',
2080+
accessibilitySupport: 'auto',
20622081

20632082
viewInfo: {
20642083
extraEditorClassName: '',

src/vs/monaco.d.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2882,6 +2882,11 @@ declare module monaco.editor {
28822882
* Defaults to 'alt'
28832883
*/
28842884
multiCursorModifier?: 'ctrlCmd' | 'alt';
2885+
/**
2886+
* Configure the editor's accessibility support.
2887+
* Defaults to 'auto'. It is best to leave this to 'auto'.
2888+
*/
2889+
accessibilitySupport?: 'auto' | 'off' | 'on';
28852890
/**
28862891
* Enable quick suggestions (shadow suggestions)
28872892
* Defaults to true.

0 commit comments

Comments
 (0)