Skip to content

Commit 8f5d5eb

Browse files
committed
Implement unfocused view dimming
Fixes microsoft#30522
1 parent 9a28101 commit 8f5d5eb

File tree

3 files changed

+52
-0
lines changed

3 files changed

+52
-0
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import { NotificationFocusedContext } from 'vs/workbench/common/contextkeys';
2929
import { IAccessibleViewService, AccessibleViewService, IAccessibleContentProvider, IAccessibleViewOptions, AccessibleViewType, accessibleViewIsShown } from 'vs/workbench/contrib/accessibility/browser/accessibleView';
3030
import { IHoverService } from 'vs/workbench/services/hover/browser/hover';
3131
import { alert } from 'vs/base/browser/ui/aria/aria';
32+
import { UnfocusedViewDimmingContribution } from 'vs/workbench/contrib/accessibility/browser/unfocusedViewDimmingContribution';
3233

3334
registerAccessibilityConfiguration();
3435
registerSingleton(IAccessibleViewService, AccessibleViewService, InstantiationType.Delayed);
@@ -101,6 +102,7 @@ class EditorAccessibilityHelpContribution extends Disposable {
101102

102103
const workbenchRegistry = Registry.as<IWorkbenchContributionsRegistry>(WorkbenchExtensions.Workbench);
103104
workbenchRegistry.registerWorkbenchContribution(EditorAccessibilityHelpContribution, LifecyclePhase.Eventually);
105+
workbenchRegistry.registerWorkbenchContribution(UnfocusedViewDimmingContribution, LifecyclePhase.Restored);
104106

105107

106108

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@ 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';
1313

14+
export const enum AccessibilitySettingId {
15+
UnfocusedViewOpacity = 'accessibility.unfocusedViewOpacity'
16+
}
17+
1418
export const enum AccessibilityVerbositySettingId {
1519
Terminal = 'accessibility.verbosity.terminal',
1620
DiffEditor = 'accessibility.verbosity.diffEditor',
@@ -65,6 +69,12 @@ const configuration: IConfigurationNode = {
6569
[AccessibilityVerbositySettingId.Notification]: {
6670
description: localize('verbosity.notification', 'Provide information about how to open the notification in an accessible view.'),
6771
...baseProperty
72+
},
73+
[AccessibilitySettingId.UnfocusedViewOpacity]: {
74+
description: localize('unfocusedViewOpacity', 'The opacity percentage to use for unfocused editors and terminals.'),
75+
type: 'number',
76+
default: 1,
77+
tags: ['accessibility']
6878
}
6979
}
7080
};
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/*---------------------------------------------------------------------------------------------
2+
* Copyright (c) Microsoft Corporation. All rights reserved.
3+
* Licensed under the MIT License. See License.txt in the project root for license information.
4+
*--------------------------------------------------------------------------------------------*/
5+
6+
import { Event } from 'vs/base/common/event';
7+
import { Disposable, toDisposable } from 'vs/base/common/lifecycle';
8+
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
9+
import { IWorkbenchContribution } from 'vs/workbench/common/contributions';
10+
import { AccessibilitySettingId } from 'vs/workbench/contrib/accessibility/browser/accessibilityContribution';
11+
12+
export class UnfocusedViewDimmingContribution extends Disposable implements IWorkbenchContribution {
13+
constructor(
14+
@IConfigurationService configurationService: IConfigurationService,
15+
) {
16+
super();
17+
18+
const elStyle = document.createElement('style');
19+
elStyle.className = 'accessibilityUnfocusedViewOpacity';
20+
document.head.appendChild(elStyle);
21+
this._register(toDisposable(() => elStyle.remove()));
22+
23+
this._register(Event.runAndSubscribe(configurationService.onDidChangeConfiguration, e => {
24+
if (e && !e.affectsConfiguration(AccessibilitySettingId.UnfocusedViewOpacity)) {
25+
return;
26+
}
27+
28+
let opacity = configurationService.getValue(AccessibilitySettingId.UnfocusedViewOpacity);
29+
if (typeof opacity !== 'number') {
30+
opacity = 1;
31+
}
32+
33+
const rules = new Set<string>();
34+
rules.add(`.monaco-workbench .terminal.xterm:not(.focus) { filter: opacity(${opacity}); }`);
35+
rules.add(`.monaco-workbench .editor-instance .monaco-editor:not(.focused) { filter: opacity(${opacity}); }`);
36+
37+
elStyle.textContent = [...rules].join('\n');
38+
}));
39+
}
40+
}

0 commit comments

Comments
 (0)