Skip to content

Commit ea700ef

Browse files
committed
1 parent b9d46af commit ea700ef

File tree

2 files changed

+66
-47
lines changed

2 files changed

+66
-47
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,10 @@ Registry.as<IConfigurationRegistry>(ConfigurationExtensions.Configuration).regis
9797
'description': localize('audioCues.terminalQuickFix', "Plays a sound when terminal Quick Fixes are available."),
9898
...audioCueFeatureBase,
9999
},
100+
'audioCues.terminalBell': {
101+
'description': localize('audioCues.terminalBell', "Plays a sound when the terminal bell is ringing."),
102+
...audioCueFeatureBase,
103+
},
100104
'audioCues.diffLineInserted': {
101105
'description': localize('audioCues.diffLineInserted', "Plays a sound when the focus moves to an inserted line in Accessible Diff Viewer mode or to the next/previous change."),
102106
...audioCueFeatureBase,

src/vs/workbench/contrib/audioCues/browser/commands.ts

Lines changed: 62 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ import { localize } from 'vs/nls';
99
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
1010
import { Action2 } from 'vs/platform/actions/common/actions';
1111
import { AudioCue, IAudioCueService } from 'vs/platform/audioCues/browser/audioCueService';
12+
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
1213
import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
1314
import { IQuickInputService, IQuickPickItem } from 'vs/platform/quickinput/common/quickInput';
14-
import { IPreferencesService } from 'vs/workbench/services/preferences/common/preferences';
1515

1616
export class ShowAudioCueHelp extends Action2 {
1717
static readonly ID = 'audioCues.help';
@@ -29,36 +29,44 @@ export class ShowAudioCueHelp extends Action2 {
2929

3030
override async run(accessor: ServicesAccessor): Promise<void> {
3131
const audioCueService = accessor.get(IAudioCueService);
32-
const quickPickService = accessor.get(IQuickInputService);
33-
const preferencesService = accessor.get(IPreferencesService);
32+
const quickInputService = accessor.get(IQuickInputService);
33+
const configurationService = accessor.get(IConfigurationService);
3434
const accessibilityService = accessor.get(IAccessibilityService);
35-
35+
const userGestureCues = [AudioCue.save, AudioCue.format];
3636
const items: (IQuickPickItem & { audioCue: AudioCue })[] = AudioCue.allAudioCues.map((cue, idx) => ({
37-
label: accessibilityService.isScreenReaderOptimized() ?
38-
`${cue.name}${audioCueService.isCueEnabled(cue) ? '' : ' (' + localize('disabled', "Disabled") + ')'}`
39-
: `${audioCueService.isCueEnabled(cue) ? '$(check)' : ' '} ${cue.name}`,
37+
label: userGestureCues.includes(cue) ? `${cue.name} (${configurationService.getValue(cue.settingsKey)})` : cue.name,
4038
audioCue: cue,
41-
buttons: [{
39+
buttons: userGestureCues.includes(cue) ? [{
4240
iconClass: ThemeIcon.asClassName(Codicon.settingsGear),
4341
tooltip: localize('audioCues.help.settings', 'Enable/Disable Audio Cue'),
44-
}],
42+
alwaysVisible: true
43+
}] : []
4544
}));
46-
47-
const quickPick = quickPickService.pick<IQuickPickItem & { audioCue: AudioCue }>(
48-
items,
49-
{
50-
activeItem: items[0],
51-
onDidFocus: (item) => {
52-
audioCueService.playSound(item.audioCue.sound.getSound(true), true);
53-
},
54-
onDidTriggerItemButton: (context) => {
55-
preferencesService.openSettings({ query: context.item.audioCue.settingsKey });
56-
},
57-
placeHolder: localize('audioCues.help.placeholder', 'Select an audio cue to play'),
45+
const qp = quickInputService.createQuickPick<IQuickPickItem & { audioCue: AudioCue }>();
46+
qp.items = items;
47+
qp.selectedItems = items.filter(i => audioCueService.isCueEnabled(i.audioCue));
48+
qp.onDidHide(() => {
49+
const enabledCues = qp.selectedItems.map(i => i.audioCue);
50+
const disabledCues = AudioCue.allAudioCues.filter(cue => !enabledCues.includes(cue));
51+
for (const cue of enabledCues) {
52+
if (!userGestureCues.includes(cue)) {
53+
configurationService.updateValue(cue.settingsKey, accessibilityService.isScreenReaderOptimized() ? 'auto' : 'on');
54+
}
5855
}
59-
);
60-
61-
await quickPick;
56+
for (const cue of disabledCues) {
57+
if (userGestureCues.includes(cue)) {
58+
configurationService.updateValue(cue.settingsKey, 'never');
59+
} else {
60+
configurationService.updateValue(cue.settingsKey, 'off');
61+
}
62+
}
63+
});
64+
qp.onDidChangeActive(() => {
65+
audioCueService.playSound(qp.activeItems[0].audioCue.sound.getSound(true), true);
66+
});
67+
qp.placeholder = localize('audioCues.help.placeholder', 'Select an audio cue to play and configure');
68+
qp.canSelectMany = true;
69+
await qp.show();
6270
}
6371
}
6472

@@ -78,32 +86,39 @@ export class ShowAccessibilityAlertHelp extends Action2 {
7886

7987
override async run(accessor: ServicesAccessor): Promise<void> {
8088
const audioCueService = accessor.get(IAudioCueService);
81-
const quickPickService = accessor.get(IQuickInputService);
82-
const preferencesService = accessor.get(IPreferencesService);
83-
const accessibilityService = accessor.get(IAccessibilityService);
84-
85-
const items: (IQuickPickItem & { audioCue: AudioCue })[] = AudioCue.allAudioCues.filter(c => !!c.alertMessage).map((cue, idx) => ({
86-
label: accessibilityService.isScreenReaderOptimized() ?
87-
`${cue.name}${audioCueService.isAlertEnabled(cue) ? '' : ' (' + localize('disabled', "Disabled") + ')'}`
88-
: `${audioCueService.isAlertEnabled(cue) ? '$(check)' : ' '} ${cue.name}`,
89+
const quickInputService = accessor.get(IQuickInputService);
90+
const configurationService = accessor.get(IConfigurationService);
91+
const userGestureAlerts = [AudioCue.save, AudioCue.format];
92+
const items: (IQuickPickItem & { audioCue: AudioCue })[] = AudioCue.allAudioCues.filter(c => c.alertSettingsKey).map((cue, idx) => ({
93+
label: userGestureAlerts.includes(cue) && cue.alertSettingsKey ? `${cue.name} (${configurationService.getValue(cue.alertSettingsKey)})` : cue.name,
8994
audioCue: cue,
90-
buttons: [{
95+
buttons: userGestureAlerts.includes(cue) ? [{
9196
iconClass: ThemeIcon.asClassName(Codicon.settingsGear),
92-
tooltip: localize('alerts.help.settings', 'Enable/Disable Audio Cue'),
93-
}],
97+
tooltip: localize('alert.help.settings', 'Enable/Disable Alert'),
98+
alwaysVisible: true
99+
}] : []
94100
}));
95-
96-
const quickPick = quickPickService.pick<IQuickPickItem & { audioCue: AudioCue }>(
97-
items,
98-
{
99-
activeItem: items[0],
100-
onDidTriggerItemButton: (context) => {
101-
preferencesService.openSettings({ query: context.item.audioCue.alertSettingsKey });
102-
},
103-
placeHolder: localize('alerts.help.placeholder', 'Inspect and configure the status of an alert'),
101+
const qp = quickInputService.createQuickPick<IQuickPickItem & { audioCue: AudioCue }>();
102+
qp.items = items;
103+
qp.selectedItems = items.filter(i => audioCueService.isAlertEnabled(i.audioCue));
104+
qp.onDidHide(() => {
105+
const enabledAlerts = qp.selectedItems.map(i => i.audioCue);
106+
const disabledAlerts = AudioCue.allAudioCues.filter(cue => !enabledAlerts.includes(cue));
107+
for (const cue of enabledAlerts) {
108+
if (!userGestureAlerts.includes(cue)) {
109+
configurationService.updateValue(cue.alertSettingsKey!, true);
110+
}
104111
}
105-
);
106-
107-
await quickPick;
112+
for (const cue of disabledAlerts) {
113+
if (userGestureAlerts.includes(cue)) {
114+
configurationService.updateValue(cue.alertSettingsKey!, 'never');
115+
} else {
116+
configurationService.updateValue(cue.alertSettingsKey!, false);
117+
}
118+
}
119+
});
120+
qp.placeholder = localize('alert.help.placeholder', 'Select an alert to configure');
121+
qp.canSelectMany = true;
122+
await qp.show();
108123
}
109124
}

0 commit comments

Comments
 (0)