Skip to content

Commit caa5334

Browse files
committed
Fix microsoft#52590 - don't move focus when clicking the search details buttons with screenreader mode turned on.
Because NVDA sends click events instead of key events when pressing space. Also update this dynamically for the search option buttons
1 parent 0469b00 commit caa5334

3 files changed

Lines changed: 39 additions & 26 deletions

File tree

src/vs/editor/contrib/find/findWidget.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ import { editorFindRangeHighlight, editorFindMatch, editorFindMatchHighlight, co
3333
import { ContextScopedFindInput, ContextScopedHistoryInputBox } from 'vs/platform/widget/browser/contextScopedHistoryWidget';
3434
import { toDisposable } from 'vs/base/common/lifecycle';
3535

36-
3736
export interface IFindController {
3837
replace(): void;
3938
replaceAll(): void;
@@ -845,8 +844,6 @@ export class FindWidget extends Widget implements IOverlayWidget, IHorizontalSas
845844

846845
findPart.appendChild(this._closeBtn.domNode);
847846

848-
this.updateAccessibilitySupport();
849-
850847
return findPart;
851848
}
852849

src/vs/workbench/parts/search/browser/searchView.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
'use strict';
77

8+
import * as browser from 'vs/base/browser/browser';
89
import * as dom from 'vs/base/browser/dom';
910
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
1011
import * as aria from 'vs/base/browser/ui/aria/aria';
@@ -200,7 +201,7 @@ export class SearchView extends Viewlet implements IViewlet, IPanel {
200201

201202
this._register(dom.addDisposableListener(this.toggleQueryDetailsButton, dom.EventType.CLICK, e => {
202203
dom.EventHelper.stop(e);
203-
this.toggleQueryDetails();
204+
this.toggleQueryDetails(!this.isScreenReaderOptimized());
204205
}));
205206
this._register(dom.addDisposableListener(this.toggleQueryDetailsButton, dom.EventType.KEY_UP, (e: KeyboardEvent) => {
206207
const event = new StandardKeyboardEvent(e);
@@ -299,6 +300,12 @@ export class SearchView extends Viewlet implements IViewlet, IPanel {
299300
}
300301
}
301302

303+
private isScreenReaderOptimized() {
304+
const detected = browser.getAccessibilitySupport() === env.AccessibilitySupport.Enabled;
305+
const config = this.configurationService.getValue<IEditorOptions>('editor').accessibilitySupport;
306+
return config === 'on' || (config === 'auto' && detected);
307+
}
308+
302309
private createSearchWidget(container: HTMLElement): void {
303310
let contentPattern = this.viewletSettings['query.contentPattern'] || '';
304311
let isRegex = this.viewletSettings['query.regex'] === true;

src/vs/workbench/parts/search/browser/searchWidget.ts

Lines changed: 31 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,35 +3,38 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6-
import * as nls from 'vs/nls';
7-
import * as strings from 'vs/base/common/strings';
6+
import * as browser from 'vs/base/browser/browser';
87
import * as dom from 'vs/base/browser/dom';
9-
import { TPromise } from 'vs/base/common/winjs.base';
10-
import { Widget } from 'vs/base/browser/ui/widget';
11-
import { Action } from 'vs/base/common/actions';
8+
import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent';
129
import { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar';
13-
import { FindInput, IFindInputOptions } from 'vs/base/browser/ui/findinput/findInput';
14-
import { IMessage, HistoryInputBox } from 'vs/base/browser/ui/inputbox/inputBox';
1510
import { Button, IButtonOptions } from 'vs/base/browser/ui/button/button';
16-
import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent';
17-
import { KeybindingsRegistry, KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry';
18-
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
19-
import { ContextKeyExpr, IContextKeyService, IContextKey } from 'vs/platform/contextkey/common/contextkey';
20-
import { IContextViewService } from 'vs/platform/contextview/browser/contextView';
11+
import { FindInput, IFindInputOptions } from 'vs/base/browser/ui/findinput/findInput';
12+
import { HistoryInputBox, IMessage } from 'vs/base/browser/ui/inputbox/inputBox';
13+
import { Widget } from 'vs/base/browser/ui/widget';
14+
import { Action } from 'vs/base/common/actions';
15+
import { Delayer } from 'vs/base/common/async';
16+
import { Emitter, Event } from 'vs/base/common/event';
2117
import { KeyCode, KeyMod } from 'vs/base/common/keyCodes';
22-
import { Event, Emitter } from 'vs/base/common/event';
23-
import { IViewletService } from 'vs/workbench/services/viewlet/browser/viewlet';
24-
import { isSearchViewFocused, appendKeyBindingLabel } from 'vs/workbench/parts/search/browser/searchActions';
25-
import * as Constants from 'vs/workbench/parts/search/common/constants';
26-
import { attachInputBoxStyler, attachFindInputBoxStyler } from 'vs/platform/theme/common/styler';
27-
import { IThemeService } from 'vs/platform/theme/common/themeService';
18+
import * as env from 'vs/base/common/platform';
19+
import * as strings from 'vs/base/common/strings';
20+
import { TPromise } from 'vs/base/common/winjs.base';
2821
import { CONTEXT_FIND_WIDGET_NOT_VISIBLE } from 'vs/editor/contrib/find/findModel';
22+
import * as nls from 'vs/nls';
2923
import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService';
3024
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
31-
import { IPanelService } from 'vs/workbench/services/panel/common/panelService';
25+
import { ContextKeyExpr, IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
26+
import { IContextViewService } from 'vs/platform/contextview/browser/contextView';
27+
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
28+
import { KeybindingsRegistry, KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry';
3229
import { ISearchConfigurationProperties } from 'vs/platform/search/common/search';
30+
import { attachFindInputBoxStyler, attachInputBoxStyler } from 'vs/platform/theme/common/styler';
31+
import { IThemeService } from 'vs/platform/theme/common/themeService';
3332
import { ContextScopedFindInput, ContextScopedHistoryInputBox } from 'vs/platform/widget/browser/contextScopedHistoryWidget';
34-
import { Delayer } from 'vs/base/common/async';
33+
import { appendKeyBindingLabel, isSearchViewFocused } from 'vs/workbench/parts/search/browser/searchActions';
34+
import * as Constants from 'vs/workbench/parts/search/common/constants';
35+
import { IPanelService } from 'vs/workbench/services/panel/common/panelService';
36+
import { IViewletService } from 'vs/workbench/services/viewlet/browser/viewlet';
37+
import { IEditorOptions } from 'vs/editor/common/config/editorOptions';
3538

3639
export interface ISearchWidgetOptions {
3740
value?: string;
@@ -142,6 +145,7 @@ export class SearchWidget extends Widget {
142145
this.updateAccessibilitySupport();
143146
}
144147
});
148+
browser.onDidChangeAccessibilitySupport(() => this.updateAccessibilitySupport());
145149
this.updateAccessibilitySupport();
146150
}
147151

@@ -244,9 +248,14 @@ export class SearchWidget extends Widget {
244248
this.renderReplaceInput(this.domNode, options);
245249
}
246250

251+
private isScreenReaderOptimized() {
252+
const detected = browser.getAccessibilitySupport() === env.AccessibilitySupport.Enabled;
253+
const config = this.configurationService.getValue<IEditorOptions>('editor').accessibilitySupport;
254+
return config === 'on' || (config === 'auto' && detected);
255+
}
256+
247257
private updateAccessibilitySupport(): void {
248-
const value = this.configurationService.getValue('editor.accessibilitySupport');
249-
this.searchInput.setFocusInputOnOptionClick(value !== 'on');
258+
this.searchInput.setFocusInputOnOptionClick(!this.isScreenReaderOptimized());
250259
}
251260

252261
private renderToggleReplaceButton(parent: HTMLElement): void {

0 commit comments

Comments
 (0)