Skip to content

Commit b1ceace

Browse files
authored
Merge pull request microsoft#70503 from Microsoft/isidorn/accessibilitySimpleNavigation
trees: automaticaly enable simple navigation for accessibility
2 parents 102594e + 73a4fa5 commit b1ceace

1 file changed

Lines changed: 46 additions & 24 deletions

File tree

src/vs/platform/list/browser/listService.ts

Lines changed: 46 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import { ITreeEvent, ITreeRenderer, IAsyncDataSource, IDataSource, ITreeMouseEve
3030
import { AsyncDataTree, IAsyncDataTreeOptions } from 'vs/base/browser/ui/tree/asyncDataTree';
3131
import { DataTree, IDataTreeOptions } from 'vs/base/browser/ui/tree/dataTree';
3232
import { IKeyboardNavigationEventFilter } from 'vs/base/browser/ui/tree/abstractTree';
33+
import { IAccessibilityService, AccessibilitySupport } from 'vs/platform/accessibility/common/accessibility';
3334

3435
export type ListWidget = List<any> | PagedList<any> | ITree | ObjectTree<any, any> | DataTree<any, any, any> | AsyncDataTree<any, any, any>;
3536

@@ -785,7 +786,8 @@ export class WorkbenchObjectTree<T extends NonNullable<any>, TFilterData = void>
785786
@IListService listService: IListService,
786787
@IThemeService themeService: IThemeService,
787788
@IConfigurationService configurationService: IConfigurationService,
788-
@IKeybindingService keybindingService: IKeybindingService
789+
@IKeybindingService keybindingService: IKeybindingService,
790+
@IAccessibilityService accessibilityService: IAccessibilityService
789791
) {
790792
WorkbenchListSupportsKeyboardNavigation.bindTo(contextKeyService);
791793

@@ -805,7 +807,8 @@ export class WorkbenchObjectTree<T extends NonNullable<any>, TFilterData = void>
805807
return automaticKeyboardNavigation;
806808
};
807809

808-
const keyboardNavigation = configurationService.getValue<string>(keyboardNavigationSettingKey);
810+
const accessibilityOn = accessibilityService.getAccessibilitySupport() === AccessibilitySupport.Enabled;
811+
const keyboardNavigation = accessibilityOn ? 'simple' : configurationService.getValue<string>(keyboardNavigationSettingKey);
809812
const horizontalScrolling = typeof options.horizontalScrolling !== 'undefined' ? options.horizontalScrolling : getHorizontalScrollingSetting(configurationService);
810813
const openOnSingleClick = useSingleClickToOpen(configurationService);
811814
const [workbenchListOptions, workbenchListOptionsDisposable] = toWorkbenchListOptions(options, configurationService, keybindingService);
@@ -839,6 +842,14 @@ export class WorkbenchObjectTree<T extends NonNullable<any>, TFilterData = void>
839842

840843
const interestingContextKeys = new Set();
841844
interestingContextKeys.add(WorkbenchListAutomaticKeyboardNavigationKey);
845+
const updateKeyboardNavigation = () => {
846+
const accessibilityOn = accessibilityService.getAccessibilitySupport() === AccessibilitySupport.Enabled;
847+
const keyboardNavigation = accessibilityOn ? 'simple' : configurationService.getValue<string>(keyboardNavigationSettingKey);
848+
this.updateOptions({
849+
simpleKeyboardNavigation: keyboardNavigation === 'simple',
850+
filterOnType: keyboardNavigation === 'filter'
851+
});
852+
};
842853

843854
this.disposables.push(
844855
this.contextKeyService,
@@ -870,11 +881,7 @@ export class WorkbenchObjectTree<T extends NonNullable<any>, TFilterData = void>
870881
this.updateOptions({ indent });
871882
}
872883
if (e.affectsConfiguration(keyboardNavigationSettingKey)) {
873-
const keyboardNavigation = configurationService.getValue<string>(keyboardNavigationSettingKey);
874-
this.updateOptions({
875-
simpleKeyboardNavigation: keyboardNavigation === 'simple',
876-
filterOnType: keyboardNavigation === 'filter'
877-
});
884+
updateKeyboardNavigation();
878885
}
879886
if (e.affectsConfiguration(automaticKeyboardNavigationSettingKey)) {
880887
this.updateOptions({ automaticKeyboardNavigation: getAutomaticKeyboardNavigation() });
@@ -884,7 +891,8 @@ export class WorkbenchObjectTree<T extends NonNullable<any>, TFilterData = void>
884891
if (e.affectsSome(interestingContextKeys)) {
885892
this.updateOptions({ automaticKeyboardNavigation: getAutomaticKeyboardNavigation() });
886893
}
887-
})
894+
}),
895+
accessibilityService.onDidChangeAccessibilitySupport(() => updateKeyboardNavigation())
888896
);
889897
}
890898

@@ -918,7 +926,8 @@ export class WorkbenchDataTree<TInput, T, TFilterData = void> extends DataTree<T
918926
@IListService listService: IListService,
919927
@IThemeService themeService: IThemeService,
920928
@IConfigurationService configurationService: IConfigurationService,
921-
@IKeybindingService keybindingService: IKeybindingService
929+
@IKeybindingService keybindingService: IKeybindingService,
930+
@IAccessibilityService accessibilityService: IAccessibilityService
922931
) {
923932
WorkbenchListSupportsKeyboardNavigation.bindTo(contextKeyService);
924933

@@ -938,7 +947,8 @@ export class WorkbenchDataTree<TInput, T, TFilterData = void> extends DataTree<T
938947
return automaticKeyboardNavigation;
939948
};
940949

941-
const keyboardNavigation = configurationService.getValue<string>(keyboardNavigationSettingKey);
950+
const accessibilityOn = accessibilityService.getAccessibilitySupport() === AccessibilitySupport.Enabled;
951+
const keyboardNavigation = accessibilityOn ? 'simple' : configurationService.getValue<string>(keyboardNavigationSettingKey);
942952
const horizontalScrolling = typeof options.horizontalScrolling !== 'undefined' ? options.horizontalScrolling : getHorizontalScrollingSetting(configurationService);
943953
const openOnSingleClick = useSingleClickToOpen(configurationService);
944954
const [workbenchListOptions, workbenchListOptionsDisposable] = toWorkbenchListOptions(options, configurationService, keybindingService);
@@ -972,6 +982,14 @@ export class WorkbenchDataTree<TInput, T, TFilterData = void> extends DataTree<T
972982

973983
const interestingContextKeys = new Set();
974984
interestingContextKeys.add(WorkbenchListAutomaticKeyboardNavigationKey);
985+
const updateKeyboardNavigation = () => {
986+
const accessibilityOn = accessibilityService.getAccessibilitySupport() === AccessibilitySupport.Enabled;
987+
const keyboardNavigation = accessibilityOn ? 'simple' : configurationService.getValue<string>(keyboardNavigationSettingKey);
988+
this.updateOptions({
989+
simpleKeyboardNavigation: keyboardNavigation === 'simple',
990+
filterOnType: keyboardNavigation === 'filter'
991+
});
992+
};
975993

976994
this.disposables.push(
977995
this.contextKeyService,
@@ -1003,11 +1021,7 @@ export class WorkbenchDataTree<TInput, T, TFilterData = void> extends DataTree<T
10031021
this.updateOptions({ indent });
10041022
}
10051023
if (e.affectsConfiguration(keyboardNavigationSettingKey)) {
1006-
const keyboardNavigation = configurationService.getValue<string>(keyboardNavigationSettingKey);
1007-
this.updateOptions({
1008-
simpleKeyboardNavigation: keyboardNavigation === 'simple',
1009-
filterOnType: keyboardNavigation === 'filter'
1010-
});
1024+
updateKeyboardNavigation();
10111025
}
10121026
if (e.affectsConfiguration(automaticKeyboardNavigationSettingKey)) {
10131027
this.updateOptions({ automaticKeyboardNavigation: getAutomaticKeyboardNavigation() });
@@ -1017,7 +1031,8 @@ export class WorkbenchDataTree<TInput, T, TFilterData = void> extends DataTree<T
10171031
if (e.affectsSome(interestingContextKeys)) {
10181032
this.updateOptions({ automaticKeyboardNavigation: getAutomaticKeyboardNavigation() });
10191033
}
1020-
})
1034+
}),
1035+
accessibilityService.onDidChangeAccessibilitySupport(() => updateKeyboardNavigation())
10211036
);
10221037
}
10231038

@@ -1046,7 +1061,8 @@ export class WorkbenchAsyncDataTree<TInput, T, TFilterData = void> extends Async
10461061
@IListService listService: IListService,
10471062
@IThemeService themeService: IThemeService,
10481063
@IConfigurationService configurationService: IConfigurationService,
1049-
@IKeybindingService keybindingService: IKeybindingService
1064+
@IKeybindingService keybindingService: IKeybindingService,
1065+
@IAccessibilityService accessibilityService: IAccessibilityService
10501066
) {
10511067
WorkbenchListSupportsKeyboardNavigation.bindTo(contextKeyService);
10521068

@@ -1066,7 +1082,8 @@ export class WorkbenchAsyncDataTree<TInput, T, TFilterData = void> extends Async
10661082
return automaticKeyboardNavigation;
10671083
};
10681084

1069-
const keyboardNavigation = configurationService.getValue<string>(keyboardNavigationSettingKey);
1085+
const accessibilityOn = accessibilityService.getAccessibilitySupport() === AccessibilitySupport.Enabled;
1086+
const keyboardNavigation = accessibilityOn ? 'simple' : configurationService.getValue<string>(keyboardNavigationSettingKey);
10701087
const horizontalScrolling = typeof options.horizontalScrolling !== 'undefined' ? options.horizontalScrolling : getHorizontalScrollingSetting(configurationService);
10711088
const openOnSingleClick = useSingleClickToOpen(configurationService);
10721089
const [workbenchListOptions, workbenchListOptionsDisposable] = toWorkbenchListOptions(options, configurationService, keybindingService);
@@ -1100,6 +1117,14 @@ export class WorkbenchAsyncDataTree<TInput, T, TFilterData = void> extends Async
11001117

11011118
const interestingContextKeys = new Set();
11021119
interestingContextKeys.add(WorkbenchListAutomaticKeyboardNavigationKey);
1120+
const updateKeyboardNavigation = () => {
1121+
const accessibilityOn = accessibilityService.getAccessibilitySupport() === AccessibilitySupport.Enabled;
1122+
const keyboardNavigation = accessibilityOn ? 'simple' : configurationService.getValue<string>(keyboardNavigationSettingKey);
1123+
this.updateOptions({
1124+
simpleKeyboardNavigation: keyboardNavigation === 'simple',
1125+
filterOnType: keyboardNavigation === 'filter'
1126+
});
1127+
};
11031128

11041129
this.disposables.push(
11051130
this.contextKeyService,
@@ -1131,11 +1156,7 @@ export class WorkbenchAsyncDataTree<TInput, T, TFilterData = void> extends Async
11311156
this.updateOptions({ indent });
11321157
}
11331158
if (e.affectsConfiguration(keyboardNavigationSettingKey)) {
1134-
const keyboardNavigation = configurationService.getValue<string>(keyboardNavigationSettingKey);
1135-
this.updateOptions({
1136-
simpleKeyboardNavigation: keyboardNavigation === 'simple',
1137-
filterOnType: keyboardNavigation === 'filter'
1138-
});
1159+
updateKeyboardNavigation();
11391160
}
11401161
if (e.affectsConfiguration(automaticKeyboardNavigationSettingKey)) {
11411162
this.updateOptions({ automaticKeyboardNavigation: getAutomaticKeyboardNavigation() });
@@ -1145,7 +1166,8 @@ export class WorkbenchAsyncDataTree<TInput, T, TFilterData = void> extends Async
11451166
if (e.affectsSome(interestingContextKeys)) {
11461167
this.updateOptions({ automaticKeyboardNavigation: getAutomaticKeyboardNavigation() });
11471168
}
1148-
})
1169+
}),
1170+
accessibilityService.onDidChangeAccessibilitySupport(() => updateKeyboardNavigation())
11491171
);
11501172
}
11511173

0 commit comments

Comments
 (0)