Skip to content

Commit 7bf0f83

Browse files
committed
add next/previous
1 parent 860f46c commit 7bf0f83

File tree

3 files changed

+93
-12
lines changed

3 files changed

+93
-12
lines changed

src/vs/workbench/contrib/accessibility/browser/accessibility.contribution.ts

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ import { AccessibilityHelpNLS } from 'vs/editor/common/standaloneStrings';
1111
import { ToggleTabFocusModeAction } from 'vs/editor/contrib/toggleTabFocusMode/browser/toggleTabFocusMode';
1212
import { localize } from 'vs/nls';
1313
import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions';
14-
import { IKeybindingService, IKeyboardEvent } from 'vs/platform/keybinding/common/keybinding';
15-
import { AccessibilityHelpAction, AccessibleViewAction, registerAccessibilityConfiguration } from 'vs/workbench/contrib/accessibility/browser/accessibilityContribution';
14+
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
15+
import { AccessibilityHelpAction, AccessibleViewAction, AccessibleViewNextAction, AccessibleViewPreviousAction, registerAccessibilityConfiguration } from 'vs/workbench/contrib/accessibility/browser/accessibilityContribution';
1616
import * as strings from 'vs/base/common/strings';
1717
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
1818
import { IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions } from 'vs/workbench/common/contributions';
@@ -27,7 +27,6 @@ import { getNotificationFromContext } from 'vs/workbench/browser/parts/notificat
2727
import { IListService, WorkbenchList } from 'vs/platform/list/browser/listService';
2828
import { NotificationFocusedContext } from 'vs/workbench/common/contextkeys';
2929
import { IAccessibleViewService, AccessibleViewService, IAccessibleContentProvider, IAccessibleViewOptions, AccessibleViewType } from 'vs/workbench/contrib/accessibility/browser/accessibleView';
30-
import { KeyCode } from 'vs/base/common/keyCodes';
3130

3231
registerAccessibilityConfiguration();
3332
registerSingleton(IAccessibleViewService, AccessibleViewService, InstantiationType.Delayed);
@@ -193,19 +192,21 @@ class NotificationAccessibleViewContribution extends Disposable {
193192
onClose(): void {
194193
focusList();
195194
},
196-
onKeyDown(e: IKeyboardEvent): void {
195+
next(): void {
197196
if (!list) {
198197
return;
199198
}
200-
if (e.altKey && e.keyCode === KeyCode.BracketRight) {
201-
focusList();
202-
list.focusNext();
203-
renderAccessibleView();
204-
} else if (e.altKey && e.keyCode === KeyCode.BracketLeft) {
205-
focusList();
206-
list.focusPrevious();
207-
renderAccessibleView();
199+
focusList();
200+
list.focusNext();
201+
renderAccessibleView();
202+
},
203+
previous(): void {
204+
if (!list) {
205+
return;
208206
}
207+
focusList();
208+
list.focusPrevious();
209+
renderAccessibleView();
209210
},
210211
verbositySettingKey: 'notifications',
211212
options: {
@@ -221,3 +222,22 @@ class NotificationAccessibleViewContribution extends Disposable {
221222
}
222223

223224
workbenchContributionsRegistry.registerWorkbenchContribution(NotificationAccessibleViewContribution, LifecyclePhase.Eventually);
225+
226+
class AccessibleViewNavigatorContribution extends Disposable {
227+
static ID: 'AccessibleViewNavigatorContribution';
228+
constructor() {
229+
super();
230+
this._register(AccessibleViewNextAction.addImplementation(95, 'next', accessor => {
231+
const accessibleViewService = accessor.get(IAccessibleViewService);
232+
accessibleViewService.next();
233+
return true;
234+
}));
235+
this._register(AccessibleViewPreviousAction.addImplementation(95, 'previous', accessor => {
236+
const accessibleViewService = accessor.get(IAccessibleViewService);
237+
accessibleViewService.previous();
238+
return true;
239+
}));
240+
}
241+
}
242+
243+
workbenchContributionsRegistry.registerWorkbenchContribution(AccessibleViewNavigatorContribution, LifecyclePhase.Eventually);

src/vs/workbench/contrib/accessibility/browser/accessibilityContribution.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { Command, MultiCommand } from 'vs/editor/browser/editorExtensions';
1010
import { KeyCode, KeyMod } from 'vs/base/common/keyCodes';
1111
import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry';
1212
import { MenuId } from 'vs/platform/actions/common/actions';
13+
import { accessibleViewIsShown } from 'vs/workbench/contrib/accessibility/browser/accessibleView';
1314

1415
export const enum AccessibilityVerbositySettingId {
1516
Terminal = 'accessibility.verbosity.terminal',
@@ -106,3 +107,34 @@ export const AccessibleViewAction = registerCommand(new MultiCommand({
106107
order: 1
107108
}],
108109
}));
110+
111+
112+
export const AccessibleViewNextAction = registerCommand(new MultiCommand({
113+
id: 'editor.action.accessibleViewNext',
114+
precondition: accessibleViewIsShown,
115+
kbOpts: {
116+
primary: KeyMod.Alt | KeyCode.BracketRight,
117+
weight: KeybindingWeight.WorkbenchContrib
118+
},
119+
menuOpts: [{
120+
menuId: MenuId.CommandPalette,
121+
group: '',
122+
title: localize('editor.action.accessibleViewNext', "Next Accessible View"),
123+
order: 1
124+
}],
125+
}));
126+
127+
export const AccessibleViewPreviousAction = registerCommand(new MultiCommand({
128+
id: 'editor.action.accessibleViewPrevious',
129+
precondition: accessibleViewIsShown,
130+
kbOpts: {
131+
primary: KeyMod.Alt | KeyCode.BracketLeft,
132+
weight: KeybindingWeight.WorkbenchContrib
133+
},
134+
menuOpts: [{
135+
menuId: MenuId.CommandPalette,
136+
group: '',
137+
title: localize('editor.action.accessibleViewPrevious', "Previous Accessible View"),
138+
order: 1
139+
}],
140+
}));

src/vs/workbench/contrib/accessibility/browser/accessibleView.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ export interface IAccessibleContentProvider {
3636
provideContent(): string;
3737
onClose(): void;
3838
onKeyDown?(e: IKeyboardEvent): void;
39+
previous?(): void;
40+
next?(): void;
3941
options: IAccessibleViewOptions;
4042
}
4143

@@ -44,6 +46,8 @@ export const IAccessibleViewService = createDecorator<IAccessibleViewService>('a
4446
export interface IAccessibleViewService {
4547
readonly _serviceBrand: undefined;
4648
show(provider: IAccessibleContentProvider): void;
49+
next(): void;
50+
previous(): void;
4751
}
4852

4953
export const enum AccessibleViewType {
@@ -59,9 +63,11 @@ export interface IAccessibleViewOptions {
5963
}
6064

6165
export const accessibilityHelpIsShown = new RawContextKey<boolean>('accessibilityHelpIsShown', false, true);
66+
export const accessibleViewIsShown = new RawContextKey<boolean>('accessibleViewIsShown', false, true);
6267
class AccessibleView extends Disposable {
6368
private _editorWidget: CodeEditorWidget;
6469
private _accessiblityHelpIsShown: IContextKey<boolean>;
70+
private _accessibleViewIsShown: IContextKey<boolean>;
6571
get editorWidget() { return this._editorWidget; }
6672
private _editorContainer: HTMLElement;
6773
private _currentProvider: IAccessibleContentProvider | undefined;
@@ -77,6 +83,7 @@ class AccessibleView extends Disposable {
7783
) {
7884
super();
7985
this._accessiblityHelpIsShown = accessibilityHelpIsShown.bindTo(this._contextKeyService);
86+
this._accessibleViewIsShown = accessibleViewIsShown.bindTo(this._contextKeyService);
8087
this._editorContainer = document.createElement('div');
8188
this._editorContainer.classList.add('accessible-view');
8289
const codeEditorWidgetOptions: ICodeEditorWidgetOptions = {
@@ -119,6 +126,8 @@ class AccessibleView extends Disposable {
119126
onHide: () => {
120127
if (provider.options.type === AccessibleViewType.HelpMenu) {
121128
this._accessiblityHelpIsShown.reset();
129+
} else {
130+
this._accessibleViewIsShown.reset();
122131
}
123132
this._currentProvider = undefined;
124133
}
@@ -129,6 +138,20 @@ class AccessibleView extends Disposable {
129138
}
130139
}
131140

141+
previous(): void {
142+
if (!this._currentProvider) {
143+
return;
144+
}
145+
this._currentProvider.previous?.();
146+
}
147+
148+
next(): void {
149+
if (!this._currentProvider) {
150+
return;
151+
}
152+
this._currentProvider.next?.();
153+
}
154+
132155
private _render(provider: IAccessibleContentProvider, container: HTMLElement): IDisposable {
133156
this._currentProvider = provider;
134157
const settingKey = `accessibility.verbosity.${provider.verbositySettingKey}`;
@@ -227,4 +250,10 @@ export class AccessibleViewService extends Disposable implements IAccessibleView
227250
}
228251
this._accessibleView.show(provider);
229252
}
253+
next(): void {
254+
this._accessibleView?.next();
255+
}
256+
previous(): void {
257+
this._accessibleView?.previous();
258+
}
230259
}

0 commit comments

Comments
 (0)