diff --git a/build/builtInExtensions.json b/build/builtInExtensions.json index 2db43516b843f4555e50f6aa6c59aaa392843358..b718bdd60e545af204173cef555b4cd8212f689d 100644 --- a/build/builtInExtensions.json +++ b/build/builtInExtensions.json @@ -16,7 +16,7 @@ }, { "name": "ms-vscode.node-debug2", - "version": "1.42.0", + "version": "1.42.1", "repo": "https://github.com/Microsoft/vscode-node-debug2", "metadata": { "id": "36d19e17-7569-4841-a001-947eb18602b2", @@ -46,7 +46,7 @@ }, { "name": "ms-vscode.js-debug-nightly", - "version": "latest", + "version": "2020.1.33183", "forQualities": ["insider"], "repo": "https://github.com/Microsoft/vscode-js-debug", "metadata": { diff --git a/src/vs/editor/browser/config/configuration.ts b/src/vs/editor/browser/config/configuration.ts index 142b4b3eda16a2d657a59d18609c62c5853c7bbe..8ba8c494b7a59c679479e196b8265f552ebe0c79 100644 --- a/src/vs/editor/browser/config/configuration.ts +++ b/src/vs/editor/browser/config/configuration.ts @@ -14,7 +14,7 @@ import { CommonEditorConfiguration, IEnvConfiguration } from 'vs/editor/common/c import { EditorOption, IEditorConstructionOptions, EditorFontLigatures } from 'vs/editor/common/config/editorOptions'; import { BareFontInfo, FontInfo } from 'vs/editor/common/config/fontInfo'; import { IDimension } from 'vs/editor/common/editorCommon'; -import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility'; +import { IAccessibilityService, AccessibilitySupport } from 'vs/platform/accessibility/common/accessibility'; class CSSBasedConfigurationCache { @@ -338,7 +338,7 @@ export class Configuration extends CommonEditorConfiguration { } this._register(browser.onDidChangeZoomLevel(_ => this._recomputeOptions())); - this._register(this.accessibilityService.onDidChangeAccessibilitySupport(() => this._recomputeOptions())); + this._register(this.accessibilityService.onDidChangeScreenReaderOptimized(() => this._recomputeOptions())); this._recomputeOptions(); } @@ -379,7 +379,7 @@ export class Configuration extends CommonEditorConfiguration { emptySelectionClipboard: browser.isWebKit || browser.isFirefox, pixelRatio: browser.getPixelRatio(), zoomLevel: browser.getZoomLevel(), - accessibilitySupport: this.accessibilityService.getAccessibilitySupport() + accessibilitySupport: this.accessibilityService.isScreenReaderOptimized() ? AccessibilitySupport.Enabled : AccessibilitySupport.Disabled }; } diff --git a/src/vs/editor/standalone/browser/standaloneServices.ts b/src/vs/editor/standalone/browser/standaloneServices.ts index be125790feee8e191d8cb35826ad60ed7f591dab..44581138ad5b37ec8264eceb69f786606c024de6 100644 --- a/src/vs/editor/standalone/browser/standaloneServices.ts +++ b/src/vs/editor/standalone/browser/standaloneServices.ts @@ -45,9 +45,9 @@ import { MenuService } from 'vs/platform/actions/common/menuService'; import { IMarkerDecorationsService } from 'vs/editor/common/services/markersDecorationService'; import { MarkerDecorationsService } from 'vs/editor/common/services/markerDecorationsServiceImpl'; import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility'; -import { BrowserAccessibilityService } from 'vs/platform/accessibility/common/accessibilityService'; import { ILayoutService } from 'vs/platform/layout/browser/layoutService'; import { getSingletonServiceDescriptors } from 'vs/platform/instantiation/common/extensions'; +import { AccessibilityService } from 'vs/platform/accessibility/common/accessibilityService'; export interface IEditorOverrideServices { [index: string]: any; @@ -192,7 +192,7 @@ export class DynamicStandaloneServices extends Disposable { let contextKeyService = ensure(IContextKeyService, () => this._register(new ContextKeyService(configurationService))); - ensure(IAccessibilityService, () => new BrowserAccessibilityService(contextKeyService, configurationService)); + ensure(IAccessibilityService, () => new AccessibilityService(contextKeyService, configurationService)); ensure(IListService, () => new ListService(themeService)); diff --git a/src/vs/platform/accessibility/common/abstractAccessibilityService.ts b/src/vs/platform/accessibility/common/abstractAccessibilityService.ts deleted file mode 100644 index 814e9fd0bf00745e47c0c7f7fcfba24a299ceeca..0000000000000000000000000000000000000000 --- a/src/vs/platform/accessibility/common/abstractAccessibilityService.ts +++ /dev/null @@ -1,43 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import { Disposable } from 'vs/base/common/lifecycle'; -import { IAccessibilityService, AccessibilitySupport, CONTEXT_ACCESSIBILITY_MODE_ENABLED } from 'vs/platform/accessibility/common/accessibility'; -import { Event, Emitter } from 'vs/base/common/event'; -import { IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; - -export abstract class AbstractAccessibilityService extends Disposable implements IAccessibilityService { - _serviceBrand: undefined; - - private _accessibilityModeEnabledContext: IContextKey; - protected readonly _onDidChangeAccessibilitySupport = new Emitter(); - readonly onDidChangeAccessibilitySupport: Event = this._onDidChangeAccessibilitySupport.event; - - constructor( - @IContextKeyService private readonly _contextKeyService: IContextKeyService, - @IConfigurationService private readonly _configurationService: IConfigurationService, - ) { - super(); - this._accessibilityModeEnabledContext = CONTEXT_ACCESSIBILITY_MODE_ENABLED.bindTo(this._contextKeyService); - this._register(this._configurationService.onDidChangeConfiguration(e => { - if (e.affectsConfiguration('editor.accessibilitySupport')) { - this._updateContextKey(); - } - })); - this._updateContextKey(); - this.onDidChangeAccessibilitySupport(() => this._updateContextKey()); - } - - abstract alwaysUnderlineAccessKeys(): Promise; - abstract getAccessibilitySupport(): AccessibilitySupport; - abstract setAccessibilitySupport(accessibilitySupport: AccessibilitySupport): void; - - private _updateContextKey(): void { - const detected = this.getAccessibilitySupport() === AccessibilitySupport.Enabled; - const config = this._configurationService.getValue('editor.accessibilitySupport'); - this._accessibilityModeEnabledContext.set(config === 'on' || (config === 'auto' && detected)); - } -} \ No newline at end of file diff --git a/src/vs/platform/accessibility/common/accessibility.ts b/src/vs/platform/accessibility/common/accessibility.ts index 825ff4e20ec831fd8730e37fc5bfecb10d5aab0c..0fb23d2e7f04163b907a802b95530469a9a826fd 100644 --- a/src/vs/platform/accessibility/common/accessibility.ts +++ b/src/vs/platform/accessibility/common/accessibility.ts @@ -12,10 +12,10 @@ export const IAccessibilityService = createDecorator('acc export interface IAccessibilityService { _serviceBrand: undefined; - readonly onDidChangeAccessibilitySupport: Event; + readonly onDidChangeScreenReaderOptimized: Event; alwaysUnderlineAccessKeys(): Promise; - getAccessibilitySupport(): AccessibilitySupport; + isScreenReaderOptimized(): boolean; setAccessibilitySupport(accessibilitySupport: AccessibilitySupport): void; } diff --git a/src/vs/platform/accessibility/common/accessibilityService.ts b/src/vs/platform/accessibility/common/accessibilityService.ts index 2f1d30ec3deed3c6a7efc7d8c21f0db0f6a18418..bbc79d2c54a9f1f34e79ec58768097ff11b04426 100644 --- a/src/vs/platform/accessibility/common/accessibilityService.ts +++ b/src/vs/platform/accessibility/common/accessibilityService.ts @@ -3,22 +3,43 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IAccessibilityService, AccessibilitySupport } from 'vs/platform/accessibility/common/accessibility'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; +import { Disposable } from 'vs/base/common/lifecycle'; +import { IAccessibilityService, AccessibilitySupport, CONTEXT_ACCESSIBILITY_MODE_ENABLED } from 'vs/platform/accessibility/common/accessibility'; +import { Event, Emitter } from 'vs/base/common/event'; +import { IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { AbstractAccessibilityService } from 'vs/platform/accessibility/common/abstractAccessibilityService'; - -export class BrowserAccessibilityService extends AbstractAccessibilityService implements IAccessibilityService { +export class AccessibilityService extends Disposable implements IAccessibilityService { _serviceBrand: undefined; - private _accessibilitySupport = AccessibilitySupport.Unknown; + private _accessibilityModeEnabledContext: IContextKey; + protected _accessibilitySupport = AccessibilitySupport.Unknown; + protected readonly _onDidChangeScreenReaderOptimized = new Emitter(); constructor( - @IContextKeyService readonly contextKeyService: IContextKeyService, - @IConfigurationService readonly configurationService: IConfigurationService, + @IContextKeyService private readonly _contextKeyService: IContextKeyService, + @IConfigurationService protected readonly _configurationService: IConfigurationService, ) { - super(contextKeyService, configurationService); + super(); + this._accessibilityModeEnabledContext = CONTEXT_ACCESSIBILITY_MODE_ENABLED.bindTo(this._contextKeyService); + const updateContextKey = () => this._accessibilityModeEnabledContext.set(this.isScreenReaderOptimized()); + this._register(this._configurationService.onDidChangeConfiguration(e => { + if (e.affectsConfiguration('editor.accessibilitySupport')) { + updateContextKey(); + this._onDidChangeScreenReaderOptimized.fire(); + } + })); + updateContextKey(); + this.onDidChangeScreenReaderOptimized(() => updateContextKey()); + } + + get onDidChangeScreenReaderOptimized(): Event { + return this._onDidChangeScreenReaderOptimized.event; + } + + isScreenReaderOptimized(): boolean { + const config = this._configurationService.getValue('editor.accessibilitySupport'); + return config === 'on' || (config === 'auto' && this._accessibilitySupport === AccessibilitySupport.Enabled); } alwaysUnderlineAccessKeys(): Promise { @@ -31,10 +52,6 @@ export class BrowserAccessibilityService extends AbstractAccessibilityService im } this._accessibilitySupport = accessibilitySupport; - this._onDidChangeAccessibilitySupport.fire(); - } - - getAccessibilitySupport(): AccessibilitySupport { - return this._accessibilitySupport; + this._onDidChangeScreenReaderOptimized.fire(); } -} \ No newline at end of file +} diff --git a/src/vs/platform/list/browser/listService.ts b/src/vs/platform/list/browser/listService.ts index c8a08f2f706587047b74bffb030b1b06a23d7b80..280d271e07a28a8908a9ed18de8330230aa31b5e 100644 --- a/src/vs/platform/list/browser/listService.ts +++ b/src/vs/platform/list/browser/listService.ts @@ -30,7 +30,7 @@ import { ITreeEvent, ITreeRenderer, IAsyncDataSource, IDataSource, ITreeMouseEve import { AsyncDataTree, IAsyncDataTreeOptions, CompressibleAsyncDataTree, ITreeCompressionDelegate, ICompressibleAsyncDataTreeOptions } from 'vs/base/browser/ui/tree/asyncDataTree'; import { DataTree, IDataTreeOptions } from 'vs/base/browser/ui/tree/dataTree'; import { IKeyboardNavigationEventFilter, IAbstractTreeOptions, RenderIndentGuides } from 'vs/base/browser/ui/tree/abstractTree'; -import { IAccessibilityService, AccessibilitySupport } from 'vs/platform/accessibility/common/accessibility'; +import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility'; export type ListWidget = List | PagedList | ITree | ObjectTree | DataTree | AsyncDataTree; @@ -905,7 +905,7 @@ function workbenchTreeDataPreamble(keyboardNavigationSettingKey); const horizontalScrolling = typeof options.horizontalScrolling !== 'undefined' ? options.horizontalScrolling : getHorizontalScrollingSetting(configurationService); const openOnSingleClick = useSingleClickToOpen(configurationService); @@ -968,7 +968,7 @@ class WorkbenchTreeInternals { const interestingContextKeys = new Set(); interestingContextKeys.add(WorkbenchListAutomaticKeyboardNavigationKey); const updateKeyboardNavigation = () => { - const accessibilityOn = accessibilityService.getAccessibilitySupport() === AccessibilitySupport.Enabled; + const accessibilityOn = accessibilityService.isScreenReaderOptimized(); const keyboardNavigation = accessibilityOn ? 'simple' : configurationService.getValue(keyboardNavigationSettingKey); tree.updateOptions({ simpleKeyboardNavigation: keyboardNavigation === 'simple', @@ -1022,7 +1022,7 @@ class WorkbenchTreeInternals { tree.updateOptions({ automaticKeyboardNavigation: getAutomaticKeyboardNavigation() }); } }), - accessibilityService.onDidChangeAccessibilitySupport(() => updateKeyboardNavigation()) + accessibilityService.onDidChangeScreenReaderOptimized(() => updateKeyboardNavigation()) ); } diff --git a/src/vs/workbench/browser/parts/editor/editorStatus.ts b/src/vs/workbench/browser/parts/editor/editorStatus.ts index 7a281a4cbdca5576e9021a83b75611559d00eac0..19fe24f3c7b9914e84f2b60ab94a17e2d6e05b4e 100644 --- a/src/vs/workbench/browser/parts/editor/editorStatus.ts +++ b/src/vs/workbench/browser/parts/editor/editorStatus.ts @@ -709,7 +709,7 @@ export class EditorStatus extends Disposable implements IWorkbenchContribution { // We only support text based editors if (editorWidget) { - const screenReaderDetected = (this.accessibilityService.getAccessibilitySupport() === AccessibilitySupport.Enabled); + const screenReaderDetected = this.accessibilityService.isScreenReaderOptimized(); if (screenReaderDetected) { const screenReaderConfiguration = this.configurationService.getValue('editor').accessibilitySupport; if (screenReaderConfiguration === 'auto') { diff --git a/src/vs/workbench/browser/parts/quickinput/quickInput.ts b/src/vs/workbench/browser/parts/quickinput/quickInput.ts index ab197d73eda978731c2e495260bc2fdfc0c86751..8aefb32cf81b351de8e27237bd15e2ebdb414275 100644 --- a/src/vs/workbench/browser/parts/quickinput/quickInput.ts +++ b/src/vs/workbench/browser/parts/quickinput/quickInput.ts @@ -40,9 +40,8 @@ import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; import { equals } from 'vs/base/common/arrays'; import { TimeoutTimer } from 'vs/base/common/async'; import { getIconClass } from 'vs/workbench/browser/parts/quickinput/quickInputUtils'; -import { IEditorOptions } from 'vs/editor/common/config/editorOptions'; import { IStorageService } from 'vs/platform/storage/common/storage'; -import { IAccessibilityService, AccessibilitySupport } from 'vs/platform/accessibility/common/accessibility'; +import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility'; import { registerSingleton } from 'vs/platform/instantiation/common/extensions'; import { registerAndGetAmdImageURL } from 'vs/base/common/amd'; @@ -1209,7 +1208,7 @@ export class QuickInputService extends Component implements IQuickInputService { onDidTriggerButton: this.onDidTriggerButtonEmitter.event, ignoreFocusOut: false, keyMods: this.keyMods, - isScreenReaderOptimized: () => this.isScreenReaderOptimized(), + isScreenReaderOptimized: () => this.accessibilityService.isScreenReaderOptimized(), show: controller => this.show(controller), hide: () => this.hide(), setVisibilities: visibilities => this.setVisibilities(visibilities), @@ -1465,12 +1464,6 @@ export class QuickInputService extends Component implements IQuickInputService { } } - private isScreenReaderOptimized() { - const detected = this.accessibilityService.getAccessibilitySupport() === AccessibilitySupport.Enabled; - const config = this.configurationService.getValue('editor').accessibilitySupport; - return config === 'on' || (config === 'auto' && detected); - } - private setEnabled(enabled: boolean) { if (enabled !== this.enabled) { this.enabled = enabled; diff --git a/src/vs/workbench/browser/parts/titlebar/menubarControl.ts b/src/vs/workbench/browser/parts/titlebar/menubarControl.ts index 93958775e4f9cc53b17d73b20fc4af1261e675b2..76a3ea95bf2b2afaf99c820e6ea7aedd06002043 100644 --- a/src/vs/workbench/browser/parts/titlebar/menubarControl.ts +++ b/src/vs/workbench/browser/parts/titlebar/menubarControl.ts @@ -31,7 +31,7 @@ import { SubmenuAction, Direction } from 'vs/base/browser/ui/menu/menu'; import { attachMenuStyler } from 'vs/platform/theme/common/styler'; import { assign } from 'vs/base/common/objects'; import { mnemonicMenuLabel, unmnemonicLabel } from 'vs/base/common/labels'; -import { IAccessibilityService, AccessibilitySupport } from 'vs/platform/accessibility/common/accessibility'; +import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility'; import { IWorkbenchLayoutService } from 'vs/workbench/services/layout/browser/layoutService'; import { isFullscreen } from 'vs/base/browser/browser'; import { IHostService } from 'vs/workbench/services/host/browser/host'; @@ -249,10 +249,8 @@ export abstract class MenubarControl extends Disposable { const hasBeenNotified = this.storageService.getBoolean('menubar/accessibleMenubarNotified', StorageScope.GLOBAL, false); const usingCustomMenubar = getTitleBarStyle(this.configurationService, this.environmentService) === 'custom'; - const detected = this.accessibilityService.getAccessibilitySupport() === AccessibilitySupport.Enabled; - const config = this.configurationService.getValue('editor.accessibilitySupport'); - if (hasBeenNotified || usingCustomMenubar || !(config === 'on' || (config === 'auto' && detected))) { + if (hasBeenNotified || usingCustomMenubar || !this.accessibilityService.isScreenReaderOptimized()) { return; } diff --git a/src/vs/workbench/contrib/search/browser/searchView.ts b/src/vs/workbench/contrib/search/browser/searchView.ts index 2e0b61c063b1b10a615f0c076f8b5e009f364a43..a0ba932444910b0c5573a0d55dcd0d22a48441b7 100644 --- a/src/vs/workbench/contrib/search/browser/searchView.ts +++ b/src/vs/workbench/contrib/search/browser/searchView.ts @@ -55,7 +55,7 @@ import { ACTIVE_GROUP, IEditorService, SIDE_GROUP } from 'vs/workbench/services/ import { IPreferencesService, ISettingsEditorOptions } from 'vs/workbench/services/preferences/common/preferences'; import { ITextFileService } from 'vs/workbench/services/textfile/common/textfiles'; import { relativePath } from 'vs/base/common/resources'; -import { IAccessibilityService, AccessibilitySupport } from 'vs/platform/accessibility/common/accessibility'; +import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility'; import { ViewPane, IViewPaneOptions } from 'vs/workbench/browser/parts/views/viewPaneContainer'; import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; import { Memento, MementoObject } from 'vs/workbench/common/memento'; @@ -277,7 +277,7 @@ export class SearchView extends ViewPane { this._register(dom.addDisposableListener(this.toggleQueryDetailsButton, dom.EventType.CLICK, e => { dom.EventHelper.stop(e); - this.toggleQueryDetails(!this.isScreenReaderOptimized()); + this.toggleQueryDetails(!this.accessibilityService.isScreenReaderOptimized()); })); this._register(dom.addDisposableListener(this.toggleQueryDetailsButton, dom.EventType.KEY_UP, (e: KeyboardEvent) => { const event = new StandardKeyboardEvent(e); @@ -410,12 +410,6 @@ export class SearchView extends ViewPane { super.updateActions(); } - private isScreenReaderOptimized() { - const detected = this.accessibilityService.getAccessibilitySupport() === AccessibilitySupport.Enabled; - const config = this.configurationService.getValue('editor').accessibilitySupport; - return config === 'on' || (config === 'auto' && detected); - } - private createSearchWidget(container: HTMLElement): void { const contentPattern = this.viewletState['query.contentPattern'] || ''; const replaceText = this.viewletState['query.replaceText'] || ''; diff --git a/src/vs/workbench/contrib/search/browser/searchWidget.ts b/src/vs/workbench/contrib/search/browser/searchWidget.ts index df337113aa4c6a5fd9cceb098eb984343a7865d0..6de22f21f68b2057b5ee74678f454e31877d4801 100644 --- a/src/vs/workbench/contrib/search/browser/searchWidget.ts +++ b/src/vs/workbench/contrib/search/browser/searchWidget.ts @@ -29,8 +29,7 @@ import { IThemeService } from 'vs/platform/theme/common/themeService'; import { ContextScopedFindInput, ContextScopedReplaceInput } from 'vs/platform/browser/contextScopedHistoryWidget'; import { appendKeyBindingLabel, isSearchViewFocused } from 'vs/workbench/contrib/search/browser/searchActions'; import * as Constants from 'vs/workbench/contrib/search/common/constants'; -import { IEditorOptions } from 'vs/editor/common/config/editorOptions'; -import { IAccessibilityService, AccessibilitySupport } from 'vs/platform/accessibility/common/accessibility'; +import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility'; import { isMacintosh } from 'vs/base/common/platform'; import { Checkbox } from 'vs/base/browser/ui/checkbox/checkbox'; import { IViewsService } from 'vs/workbench/common/views'; @@ -186,7 +185,7 @@ export class SearchWidget extends Widget { this.updateAccessibilitySupport(); } }); - this.accessibilityService.onDidChangeAccessibilitySupport(() => this.updateAccessibilitySupport()); + this.accessibilityService.onDidChangeScreenReaderOptimized(() => this.updateAccessibilitySupport()); this.updateAccessibilitySupport(); } @@ -292,14 +291,8 @@ export class SearchWidget extends Widget { this.renderReplaceInput(this.domNode, options); } - private isScreenReaderOptimized() { - const detected = this.accessibilityService.getAccessibilitySupport() === AccessibilitySupport.Enabled; - const config = this.configurationService.getValue('editor').accessibilitySupport; - return config === 'on' || (config === 'auto' && detected); - } - private updateAccessibilitySupport(): void { - this.searchInput.setFocusInputOnOptionClick(!this.isScreenReaderOptimized()); + this.searchInput.setFocusInputOnOptionClick(!this.accessibilityService.isScreenReaderOptimized()); } private renderToggleReplaceButton(parent: HTMLElement): void { diff --git a/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts b/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts index a8f89e9ba3092f36cfcad21316dedd6620105c21..aea2f505d7c7effae54c5d4af4e9f767ae37986c 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts @@ -30,7 +30,7 @@ import { ansiColorIdentifiers, TERMINAL_BACKGROUND_COLOR, TERMINAL_CURSOR_BACKGR import { TerminalConfigHelper } from 'vs/workbench/contrib/terminal/browser/terminalConfigHelper'; import { TerminalLinkHandler } from 'vs/workbench/contrib/terminal/browser/terminalLinkHandler'; import { IPanelService } from 'vs/workbench/services/panel/common/panelService'; -import { IAccessibilityService, AccessibilitySupport } from 'vs/platform/accessibility/common/accessibility'; +import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility'; import { ITerminalInstanceService, ITerminalInstance, TerminalShellType } from 'vs/workbench/contrib/terminal/browser/terminal'; import { TerminalProcessManager } from 'vs/workbench/contrib/terminal/browser/terminalProcessManager'; import { Terminal as XTermTerminal, IBuffer, ITerminalAddon } from 'xterm'; @@ -526,12 +526,6 @@ export class TerminalInstance extends Disposable implements ITerminalInstance { return xterm; } - private _isScreenReaderOptimized(): boolean { - const detected = this._accessibilityService.getAccessibilitySupport() === AccessibilitySupport.Enabled; - const config = this._configurationService.getValue('editor.accessibilitySupport'); - return config === 'on' || (config === 'auto' && detected); - } - public reattachToElement(container: HTMLElement): void { if (!this._wrapperElement) { throw new Error('The terminal instance has not been attached to a container yet'); @@ -1008,7 +1002,7 @@ export class TerminalInstance extends Disposable implements ITerminalInstance { // Create the process asynchronously to allow the terminal's container // to be created so dimensions are accurate setTimeout(() => { - this._processManager.createProcess(this._shellLaunchConfig, this._cols, this._rows, this._isScreenReaderOptimized()); + this._processManager.createProcess(this._shellLaunchConfig, this._cols, this._rows, this._accessibilityService.isScreenReaderOptimized()); }, 0); } @@ -1246,7 +1240,7 @@ export class TerminalInstance extends Disposable implements ITerminalInstance { } public updateAccessibilitySupport(): void { - const isEnabled = this._isScreenReaderOptimized(); + const isEnabled = this._accessibilityService.isScreenReaderOptimized(); if (isEnabled) { this._navigationModeAddon = new NavigationModeAddon(this._terminalA11yTreeFocusContextKey); this._xterm!.loadAddon(this._navigationModeAddon); diff --git a/src/vs/workbench/electron-browser/window.ts b/src/vs/workbench/electron-browser/window.ts index 989c9733cf6d52b995d4c422340868663d050825..65d95f95ecde867087866e2505e4e80a188868b6 100644 --- a/src/vs/workbench/electron-browser/window.ts +++ b/src/vs/workbench/electron-browser/window.ts @@ -213,7 +213,7 @@ export class ElectronWindow extends Disposable { KeyboardMapperFactory.INSTANCE._onKeyboardLayoutChanged(); }); - // keyboard layout changed event + // accessibility support changed event ipc.on('vscode:accessibilitySupportChanged', (event: IpcEvent, accessibilitySupportEnabled: boolean) => { this.accessibilityService.setAccessibilitySupport(accessibilitySupportEnabled ? AccessibilitySupport.Enabled : AccessibilitySupport.Disabled); }); diff --git a/src/vs/workbench/services/accessibility/node/accessibilityService.ts b/src/vs/workbench/services/accessibility/node/accessibilityService.ts index 1c698443b365891b65e4ca56bbe3afb839f2bf13..faedc3fd31868331c4a5c3f9178441e9a47c8b60 100644 --- a/src/vs/workbench/services/accessibility/node/accessibilityService.ts +++ b/src/vs/workbench/services/accessibility/node/accessibilityService.ts @@ -8,7 +8,7 @@ import { isWindows } from 'vs/base/common/platform'; import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { AbstractAccessibilityService } from 'vs/platform/accessibility/common/abstractAccessibilityService'; +import { AccessibilityService } from 'vs/platform/accessibility/common/accessibilityService'; import { registerSingleton } from 'vs/platform/instantiation/common/extensions'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; @@ -19,11 +19,10 @@ type AccessibilityMetricsClassification = { enabled: { classification: 'SystemMetaData', purpose: 'FeatureInsight' }; }; -export class AccessibilityService extends AbstractAccessibilityService implements IAccessibilityService { +export class NodeAccessibilityService extends AccessibilityService implements IAccessibilityService { _serviceBrand: undefined; - private _accessibilitySupport = AccessibilitySupport.Unknown; private didSendTelemetry = false; constructor( @@ -56,22 +55,13 @@ export class AccessibilityService extends AbstractAccessibilityService implement } setAccessibilitySupport(accessibilitySupport: AccessibilitySupport): void { - if (this._accessibilitySupport === accessibilitySupport) { - return; - } - - this._accessibilitySupport = accessibilitySupport; - this._onDidChangeAccessibilitySupport.fire(); + super.setAccessibilitySupport(accessibilitySupport); if (!this.didSendTelemetry && accessibilitySupport === AccessibilitySupport.Enabled) { this._telemetryService.publicLog2('accessibility', { enabled: true }); this.didSendTelemetry = true; } } - - getAccessibilitySupport(): AccessibilitySupport { - return this._accessibilitySupport; - } } -registerSingleton(IAccessibilityService, AccessibilityService, true); +registerSingleton(IAccessibilityService, NodeAccessibilityService, true); diff --git a/src/vs/workbench/services/timer/electron-browser/timerService.ts b/src/vs/workbench/services/timer/electron-browser/timerService.ts index 1f761754f547b8ae8ff6a42cfbf2258583eedc84..f796d9d28b1f1b56b73ff5ac2d0691e09551c7fd 100644 --- a/src/vs/workbench/services/timer/electron-browser/timerService.ts +++ b/src/vs/workbench/services/timer/electron-browser/timerService.ts @@ -17,7 +17,7 @@ import { ILifecycleService } from 'vs/platform/lifecycle/common/lifecycle'; import { IViewletService } from 'vs/workbench/services/viewlet/browser/viewlet'; import { IPanelService } from 'vs/workbench/services/panel/common/panelService'; import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; -import { IAccessibilityService, AccessibilitySupport } from 'vs/platform/accessibility/common/accessibility'; +import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility'; /* __GDPR__FRAGMENT__ "IMemoryInfo" : { @@ -414,7 +414,7 @@ class TimerService implements ITimerService { loadavg, initialStartup, isVMLikelyhood, - hasAccessibilitySupport: this._accessibilityService.getAccessibilitySupport() === AccessibilitySupport.Enabled, + hasAccessibilitySupport: this._accessibilityService.isScreenReaderOptimized(), emptyWorkbench: this._contextService.getWorkbenchState() === WorkbenchState.EMPTY }; } diff --git a/src/vs/workbench/test/workbenchTestServices.ts b/src/vs/workbench/test/workbenchTestServices.ts index 06ba8b40e294083f2368b32a40c0b2bcd86373f1..bca2b4ab1cab25c545b5f26d03a994be35e9eba4 100644 --- a/src/vs/workbench/test/workbenchTestServices.ts +++ b/src/vs/workbench/test/workbenchTestServices.ts @@ -331,10 +331,10 @@ export class TestAccessibilityService implements IAccessibilityService { _serviceBrand: undefined; - onDidChangeAccessibilitySupport = Event.None; + onDidChangeScreenReaderOptimized = Event.None; + isScreenReaderOptimized(): boolean { return false; } alwaysUnderlineAccessKeys(): Promise { return Promise.resolve(false); } - getAccessibilitySupport(): AccessibilitySupport { return AccessibilitySupport.Unknown; } setAccessibilitySupport(accessibilitySupport: AccessibilitySupport): void { } } diff --git a/src/vs/workbench/workbench.web.main.ts b/src/vs/workbench/workbench.web.main.ts index fe9232cab523576d3a03c1a52eec47e302469bb7..0719b361e00c4e9fee7d71dca4bc9569a0ed100b 100644 --- a/src/vs/workbench/workbench.web.main.ts +++ b/src/vs/workbench/workbench.web.main.ts @@ -52,7 +52,6 @@ import 'vs/workbench/services/extensionResourceLoader/browser/extensionResourceL import { registerSingleton } from 'vs/platform/instantiation/common/extensions'; import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility'; -import { BrowserAccessibilityService } from 'vs/platform/accessibility/common/accessibilityService'; import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; import { ContextMenuService } from 'vs/platform/contextview/browser/contextMenuService'; import { IBackupFileService } from 'vs/workbench/services/backup/common/backup'; @@ -71,10 +70,11 @@ import { UserDataSyncService } from 'vs/platform/userDataSync/common/userDataSyn import { SettingsSynchroniser } from 'vs/platform/userDataSync/common/settingsSync'; import { UserDataAuthTokenService } from 'vs/platform/userDataSync/common/userDataAuthTokenService'; import { UserDataAutoSync } from 'vs/platform/userDataSync/common/userDataAutoSync'; +import { AccessibilityService } from 'vs/platform/accessibility/common/accessibilityService'; registerSingleton(IExtensionManagementService, ExtensionManagementService); registerSingleton(IBackupFileService, BackupFileService); -registerSingleton(IAccessibilityService, BrowserAccessibilityService, true); +registerSingleton(IAccessibilityService, AccessibilityService, true); registerSingleton(IContextMenuService, ContextMenuService); registerSingleton(ITunnelService, TunnelService, true); registerSingleton(ILoggerService, FileLoggerService);