Code change:
<!-- Do Not Delete This! featurerequesttemplate --<!-- Please read our Rules of Conduct: --<!-- Please search existing issues to avoid creating duplicates. --<!-- Describe the feature you'd like. --I'm always using Dark+ Theme at VSCode (regardless of macOS light/dark appearance), but when set to , title bar style is mismatching with VSCode theme (if system-wide appearance is light). looks like this: <img width="1045" alt="image" src="https://user-"Electron has API and API that can overrides system appearance per app/window, so I injected to (yeah, its unsupported, i know) and looks pretty great. <img width="1045" alt="image" src="https://user-"However, I think code injection is not supported, possibly corrupting the installed VS Code, and disabling it with every VS Code update. so I'll suggest new settings that overrides macOS appearance based on VSCode theme. Note: I think this new settings may conflicts with and .
This is pretty cool, I was not aware we can change the title style to dark style. is this API robust to use? Do you see issues with it? I would be willing to look at + test a PR in this area if the change is small. But I wonder if a setting would be needed as well?
Hm, one issue is that theme settings can change per workspace but from the main side we have no way of reading the workspace settings...
I tested this and it seems to work really well on macOS at least. Still, I wonder if this needs to be a separate setting that the user can control it and wether we should not do this automatically. do you have thoughts on this? I know you have theming related code and settings that automatically switch the theme in VSCode between dark and light depending on the OS setting. Here we would introduce a setting for the user to "hard-code" the appearance of the application to be either dark or light. I would think this setting can only be application scoped and not per workspace though because we need to resolve this from the main side. Demo: !
It looks good! But it means we no longer get events when the OS change schemes, right? BTW when the themeservice sets a new theme, the main process gets an event:
I think the idea is that you must use whenever you are making a decision about which theme is being used. Not sure we do that already. explains the impact quite well. Yeah but that is probably too late for a smooth startup. Imagine a workspace configures the theme to be light but the default setting is dark, we would probably still set dark first only to update to light then.
If the setting is true then and, to get information about the OS scheme. But from reading the spec and what also mentioned, I believe once we set , will become and remain true and we no longer get to know what the OS scheme is and when it changes. Can you verify if that's like that? That would be a problem as we could no longer support . It's the same as for the initial window background. The ThemeMainService listens to theme changes and remembers the background of the last used theme. Yes, that can result in flickering when themes are configured in the workspace settings.
Hm, I wonder if we should actually deprecate and have a new setting with these choices: : check OS theme : pick a color scheme that matches VSCode theme (dark or light) : hardcode : hardcode This would solve the issue of conflicting settings.
Is that new setting just for the appearance of the window? How can it replace the old setting(s)? !
Yeah you are right, both are probably too different to merge into one setting because "old" setting is for changing the theme in VSCode based on OS configuration and the "new" setting is for changing the OS configuration (for the window) based on the VSCode theme.
Thinking more about this, this should work: If is true, have . The window appearance as well as the workbench color theme will be in sync as the workbench color theme follows the OS appearance. If is false, observe the current color theme and set or so the window appearance matches the color theme This could be done in the themeMainService. If needed there can also be an extra setting to control whether changing the window appearance based on color theme is wanted. What needs investigation is how this affects the detection of high contrast
I am worried that this is a somewhat breaking change for everyone that just runs with default settings and might be confusing for users. If macOS is running in light mode (default), it is probably weird that VSCode suddenly appears dark, both in the window title as well as context menus. So I think either a new setting or an update to the existing setting is still needed.
With the new setting you can now explicitly opt into mode even when the OS is set to . You can give our preview releases a try from:

Related discussion:
text: constructor(@IStateService private stateService: IStateService, @IConfigurationService private configurationService: IConfigurationService) { super(); <ins> // System Theme this._register(this.configurationService.onDidChangeConfiguration(e => { if (e.affectsConfiguration('window.systemColorTheme')) { this.updateSystemColorTheme(); } })); this.updateSystemColorTheme(); </ins> // Color Scheme changes <del> nativeTheme.on('updated', () => { this._onDidChangeColorScheme.fire(this.getColorScheme()); }); </del> <ins> this._register(Event.fromNodeEventEmitter(nativeTheme, 'updated')(() => this._onDidChangeColorScheme.fire(this.getColorScheme()))); } private updateSystemColorTheme(): void { switch (this.configurationService.getValue<'default' | 'auto' | 'light' | 'dark'>('window.systemColorTheme')) { case 'dark': nativeTheme.themeSource = 'dark'; break; case 'light': nativeTheme.themeSource = 'light'; break; case 'auto': switch (this.getBaseTheme()) { case 'vs': nativeTheme.themeSource = 'light'; break; case 'vs-dark': nativeTheme.themeSource = 'dark'; break; default: nativeTheme.themeSource = 'system'; } break; default: nativeTheme.themeSource = 'system'; break; } </ins> } getColorScheme(): IColorScheme {