diff --git a/src/vs/code/electron-main/app.ts b/src/vs/code/electron-main/app.ts index 9c7c68572b6..21a297a12d8 100644 --- a/src/vs/code/electron-main/app.ts +++ b/src/vs/code/electron-main/app.ts @@ -83,7 +83,7 @@ import { NativeURLService } from '../../platform/url/common/urlService.js'; import { ElectronURLListener } from '../../platform/url/electron-main/electronUrlListener.js'; import { IWebviewManagerService } from '../../platform/webview/common/webviewManagerService.js'; import { WebviewMainService } from '../../platform/webview/electron-main/webviewMainService.js'; -import { isFolderToOpen, isWorkspaceToOpen, IWindowOpenable, TitlebarStyle, overrideDefaultTitlebarStyle } from '../../platform/window/common/window.js'; +import { isFolderToOpen, isWorkspaceToOpen, IWindowOpenable } from '../../platform/window/common/window.js'; import { IWindowsMainService, OpenContext } from '../../platform/windows/electron-main/windows.js'; import { ICodeWindow } from '../../platform/window/electron-main/window.js'; import { WindowsMainService } from '../../platform/windows/electron-main/windowsMainService.js'; @@ -599,14 +599,6 @@ export class CodeApplication extends Disposable { // Services const appInstantiationService = await this.initServices(machineId, sqmId, devDeviceId, sharedProcessReady); - // Linux (stable only): custom title default style override - if (isLinux && this.productService.quality === 'stable') { - const titleBarDefaultStyleOverride = this.stateService.getItem('window.titleBarStyleOverride'); - if (titleBarDefaultStyleOverride === TitlebarStyle.CUSTOM) { - overrideDefaultTitlebarStyle(titleBarDefaultStyleOverride); - } - } - // Auth Handler appInstantiationService.invokeFunction(accessor => accessor.get(IProxyAuthService)); diff --git a/src/vs/platform/native/common/native.ts b/src/vs/platform/native/common/native.ts index 03a2d54de4e..049c19d1ec5 100644 --- a/src/vs/platform/native/common/native.ts +++ b/src/vs/platform/native/common/native.ts @@ -110,9 +110,6 @@ export interface ICommonNativeHostService { */ focusWindow(options?: INativeHostOptions & { force?: boolean }): Promise; - // Titlebar default style override - overrideDefaultTitlebarStyle(style: 'custom' | undefined): Promise; - // Dialogs showMessageBox(options: MessageBoxOptions & INativeHostOptions): Promise; showSaveDialog(options: SaveDialogOptions & INativeHostOptions): Promise; diff --git a/src/vs/platform/native/electron-main/nativeHostMainService.ts b/src/vs/platform/native/electron-main/nativeHostMainService.ts index b24a24ea61b..c2241a9a452 100644 --- a/src/vs/platform/native/electron-main/nativeHostMainService.ts +++ b/src/vs/platform/native/electron-main/nativeHostMainService.ts @@ -48,7 +48,6 @@ import { IConfigurationService } from '../../configuration/common/configuration. import { IProxyAuthService } from './auth.js'; import { AuthInfo, Credentials, IRequestService } from '../../request/common/request.js'; import { randomPath } from '../../../base/common/extpath.js'; -import { IStateService } from '../../state/node/state.js'; export interface INativeHostMainService extends AddFirstParameterToFunctions /* only methods, not events */, number | undefined /* window ID */> { } @@ -71,8 +70,7 @@ export class NativeHostMainService extends Disposable implements INativeHostMain @IConfigurationService private readonly configurationService: IConfigurationService, @IRequestService private readonly requestService: IRequestService, @IProxyAuthService private readonly proxyAuthService: IProxyAuthService, - @IInstantiationService private readonly instantiationService: IInstantiationService, - @IStateService private readonly stateService: IStateService + @IInstantiationService private readonly instantiationService: IInstantiationService ) { super(); } @@ -313,14 +311,6 @@ export class NativeHostMainService extends Disposable implements INativeHostMain this.themeMainService.saveWindowSplash(windowId, window?.openedWorkspace, splash); } - async overrideDefaultTitlebarStyle(windowId: number | undefined, style: 'custom' | undefined): Promise { - if (style === 'custom') { - this.stateService.setItem('window.titleBarStyleOverride', style); - } else { - this.stateService.removeItem('window.titleBarStyleOverride'); - } - } - //#endregion diff --git a/src/vs/platform/window/common/window.ts b/src/vs/platform/window/common/window.ts index 56cbfacd20d..e230d1a09a5 100644 --- a/src/vs/platform/window/common/window.ts +++ b/src/vs/platform/window/common/window.ts @@ -6,7 +6,7 @@ import { VSBuffer } from '../../../base/common/buffer.js'; import { IStringDictionary } from '../../../base/common/collections.js'; import { PerformanceMark } from '../../../base/common/performance.js'; -import { isLinux, isMacintosh, isNative, isWeb } from '../../../base/common/platform.js'; +import { isMacintosh, isNative, isWeb } from '../../../base/common/platform.js'; import { URI, UriComponents, UriDto } from '../../../base/common/uri.js'; import { ISandboxConfiguration } from '../../../base/parts/sandbox/common/sandboxTypes.js'; import { IConfigurationService } from '../../configuration/common/configuration.js'; @@ -15,7 +15,6 @@ import { NativeParsedArgs } from '../../environment/common/argv.js'; import { FileType } from '../../files/common/files.js'; import { ILoggerResource, LogLevel } from '../../log/common/log.js'; import { PolicyDefinition, PolicyValue } from '../../policy/common/policy.js'; -import product from '../../product/common/product.js'; import { IPartsSplash } from '../../theme/common/themeService.js'; import { IUserDataProfile } from '../../userDataProfile/common/userDataProfile.js'; import { IAnyWorkspaceIdentifier, ISingleFolderWorkspaceIdentifier, IWorkspaceIdentifier } from '../../workspace/common/workspace.js'; @@ -186,11 +185,6 @@ export const enum CustomTitleBarVisibility { NEVER = 'never', } -export let titlebarStyleDefaultOverride: 'custom' | undefined = undefined; -export function overrideDefaultTitlebarStyle(style: 'custom'): void { - titlebarStyleDefaultOverride = style; -} - export function hasCustomTitlebar(configurationService: IConfigurationService, titleBarStyle?: TitlebarStyle): boolean { // Returns if it possible to have a custom title bar in the curren session // Does not imply that the title bar is visible @@ -228,11 +222,7 @@ export function getTitleBarStyle(configurationService: IConfigurationService): T } } - if (titlebarStyleDefaultOverride === 'custom') { - return TitlebarStyle.CUSTOM; - } - - return isLinux && product.quality === 'stable' ? TitlebarStyle.NATIVE : TitlebarStyle.CUSTOM; // default to custom on all OS except Linux stable (for now) + return TitlebarStyle.CUSTOM; // default to custom on all OS } export const DEFAULT_CUSTOM_TITLEBAR_HEIGHT = 35; // includes space for command center @@ -392,7 +382,6 @@ export interface INativeWindowConfiguration extends IWindowConfiguration, Native autoDetectHighContrast?: boolean; autoDetectColorScheme?: boolean; isCustomZoomLevel?: boolean; - overrideDefaultTitlebarStyle?: 'custom'; perfMarks: PerformanceMark[]; diff --git a/src/vs/platform/windows/electron-main/windowsMainService.ts b/src/vs/platform/windows/electron-main/windowsMainService.ts index 4690b9702df..d2ca2f8f6c7 100644 --- a/src/vs/platform/windows/electron-main/windowsMainService.ts +++ b/src/vs/platform/windows/electron-main/windowsMainService.ts @@ -37,7 +37,7 @@ import product from '../../product/common/product.js'; import { IProtocolMainService } from '../../protocol/electron-main/protocol.js'; import { getRemoteAuthority } from '../../remote/common/remoteHosts.js'; import { IStateService } from '../../state/node/state.js'; -import { IAddRemoveFoldersRequest, INativeOpenFileRequest, INativeWindowConfiguration, IOpenEmptyWindowOptions, IPath, IPathsToWaitFor, isFileToOpen, isFolderToOpen, isWorkspaceToOpen, IWindowOpenable, IWindowSettings, titlebarStyleDefaultOverride } from '../../window/common/window.js'; +import { IAddRemoveFoldersRequest, INativeOpenFileRequest, INativeWindowConfiguration, IOpenEmptyWindowOptions, IPath, IPathsToWaitFor, isFileToOpen, isFolderToOpen, isWorkspaceToOpen, IWindowOpenable, IWindowSettings } from '../../window/common/window.js'; import { CodeWindow } from './windowImpl.js'; import { IOpenConfiguration, IOpenEmptyConfiguration, IWindowsCountChangedEvent, IWindowsMainService, OpenContext, getLastFocused } from './windows.js'; import { findWindowOnExtensionDevelopmentPath, findWindowOnFile, findWindowOnWorkspaceOrFolder } from './windowsFinder.js'; @@ -1506,7 +1506,6 @@ export class WindowsMainService extends Disposable implements IWindowsMainServic autoDetectHighContrast: windowConfig?.autoDetectHighContrast ?? true, autoDetectColorScheme: windowConfig?.autoDetectColorScheme ?? false, - overrideDefaultTitlebarStyle: titlebarStyleDefaultOverride, accessibilitySupport: app.accessibilitySupportEnabled, colorScheme: this.themeMainService.getColorScheme(), policiesData: this.policyService.serialize(), diff --git a/src/vs/workbench/common/contextkeys.ts b/src/vs/workbench/common/contextkeys.ts index 8e3f6a2f3c7..d11f9b168aa 100644 --- a/src/vs/workbench/common/contextkeys.ts +++ b/src/vs/workbench/common/contextkeys.ts @@ -15,8 +15,6 @@ import { Schemas } from '../../base/common/network.js'; import { EditorInput } from './editor/editorInput.js'; import { IEditorResolverService } from '../services/editor/common/editorResolverService.js'; import { DEFAULT_EDITOR_ASSOCIATION } from './editor.js'; -import { isLinux } from '../../base/common/platform.js'; -import product from '../../platform/product/common/product.js'; //#region < --- Workbench --- > @@ -111,7 +109,7 @@ export const StatusBarFocused = new RawContextKey('statusBarFocused', f //#region < --- Title Bar --- > -export const TitleBarStyleContext = new RawContextKey('titleBarStyle', isLinux && product.quality === 'stable' ? 'native' : 'custom', localize('titleBarStyle', "Style of the window title bar")); +export const TitleBarStyleContext = new RawContextKey('titleBarStyle', 'custom', localize('titleBarStyle', "Style of the window title bar")); export const TitleBarVisibleContext = new RawContextKey('titleBarVisible', false, localize('titleBarVisible', "Whether the title bar is visible")); //#endregion diff --git a/src/vs/workbench/electron-sandbox/desktop.contribution.ts b/src/vs/workbench/electron-sandbox/desktop.contribution.ts index 94a754a3e71..c420ccfefc3 100644 --- a/src/vs/workbench/electron-sandbox/desktop.contribution.ts +++ b/src/vs/workbench/electron-sandbox/desktop.contribution.ts @@ -28,9 +28,6 @@ import { NativeWindow } from './window.js'; import { ModifierKeyEmitter } from '../../base/browser/dom.js'; import { applicationConfigurationNodeBase, securityConfigurationNodeBase } from '../common/configuration.js'; import { MAX_ZOOM_LEVEL, MIN_ZOOM_LEVEL } from '../../platform/window/electron-sandbox/window.js'; -import product from '../../platform/product/common/product.js'; -import { registerWorkbenchContribution2, WorkbenchPhase } from '../common/contributions.js'; -import { LinuxCustomTitlebarExperiment } from './parts/titlebar/titlebarPart.js'; // Actions (function registerActions(): void { @@ -235,7 +232,7 @@ import { LinuxCustomTitlebarExperiment } from './parts/titlebar/titlebarPart.js' 'window.titleBarStyle': { 'type': 'string', 'enum': ['native', 'custom'], - 'default': isLinux && product.quality === 'stable' ? 'native' : 'custom', + 'default': 'custom', 'scope': ConfigurationScope.APPLICATION, 'description': localize('titleBarStyle', "Adjust the appearance of the window title bar to be native by the OS or custom. On Linux and Windows, this setting also affects the application and context menu appearances. Changes require a full restart to apply."), }, @@ -247,7 +244,7 @@ import { LinuxCustomTitlebarExperiment } from './parts/titlebar/titlebarPart.js' localize(`window.customTitleBarVisibility.windowed`, "Hide custom titlebar in full screen. When not in full screen, automatically change custom title bar visibility."), localize(`window.customTitleBarVisibility.never`, "Hide custom titlebar when {0} is set to `native`.", '`#window.titleBarStyle#`'), ], - 'default': isLinux && product.quality === 'stable' ? 'never' : 'auto', + 'default': 'auto', 'scope': ConfigurationScope.APPLICATION, 'markdownDescription': localize('window.customTitleBarVisibility', "Adjust when the custom title bar should be shown. The custom title bar can be hidden when in full screen mode with `windowed`. The custom title bar can only be hidden in non full screen mode with `never` when {0} is set to `native`.", '`#window.titleBarStyle#`'), }, @@ -418,6 +415,3 @@ import { LinuxCustomTitlebarExperiment } from './parts/titlebar/titlebarPart.js' jsonRegistry.registerSchema(argvDefinitionFileSchemaId, schema); })(); - -// Workbench Contributions -registerWorkbenchContribution2(LinuxCustomTitlebarExperiment.ID, LinuxCustomTitlebarExperiment, WorkbenchPhase.Eventually); diff --git a/src/vs/workbench/electron-sandbox/desktop.main.ts b/src/vs/workbench/electron-sandbox/desktop.main.ts index a728f602f53..b173b981f3b 100644 --- a/src/vs/workbench/electron-sandbox/desktop.main.ts +++ b/src/vs/workbench/electron-sandbox/desktop.main.ts @@ -45,7 +45,7 @@ import { WorkspaceTrustEnablementService, WorkspaceTrustManagementService } from import { IWorkspaceTrustEnablementService, IWorkspaceTrustManagementService } from '../../platform/workspace/common/workspaceTrust.js'; import { safeStringify } from '../../base/common/objects.js'; import { IUtilityProcessWorkerWorkbenchService, UtilityProcessWorkerWorkbenchService } from '../services/utilityProcess/electron-sandbox/utilityProcessWorkerWorkbenchService.js'; -import { isBigSurOrNewer, isCI, isLinux, isMacintosh } from '../../base/common/platform.js'; +import { isBigSurOrNewer, isCI, isMacintosh } from '../../base/common/platform.js'; import { Schemas } from '../../base/common/network.js'; import { DiskFileSystemProvider } from '../services/files/electron-sandbox/diskFileSystemProvider.js'; import { FileUserDataProvider } from '../../platform/userData/common/fileUserDataProvider.js'; @@ -61,8 +61,6 @@ import { ElectronRemoteResourceLoader } from '../../platform/remote/electron-san import { IConfigurationService } from '../../platform/configuration/common/configuration.js'; import { applyZoom } from '../../platform/window/electron-sandbox/window.js'; import { mainWindow } from '../../base/browser/window.js'; -import { Registry } from '../../platform/registry/common/platform.js'; -import { IConfigurationRegistry, Extensions } from '../../platform/configuration/common/configurationRegistry.js'; export class DesktopMain extends Disposable { @@ -81,17 +79,6 @@ export class DesktopMain extends Disposable { // Apply fullscreen early if configured setFullscreen(!!this.configuration.fullscreen, mainWindow); - - // Apply custom title override to defaults if any - if (isLinux && product.quality === 'stable' && this.configuration.overrideDefaultTitlebarStyle === 'custom') { - const configurationRegistry = Registry.as(Extensions.Configuration); - configurationRegistry.registerDefaultConfigurations([{ - overrides: { - 'window.titleBarStyle': 'custom', - 'window.customTitleBarVisibility': 'auto' - } - }]); - } } private reviveUris() { diff --git a/src/vs/workbench/electron-sandbox/parts/titlebar/titlebarPart.ts b/src/vs/workbench/electron-sandbox/parts/titlebar/titlebarPart.ts index 92af982b57e..9e7022319dc 100644 --- a/src/vs/workbench/electron-sandbox/parts/titlebar/titlebarPart.ts +++ b/src/vs/workbench/electron-sandbox/parts/titlebar/titlebarPart.ts @@ -24,10 +24,6 @@ import { IEditorGroupsContainer, IEditorGroupsService } from '../../../services/ import { IEditorService } from '../../../services/editor/common/editorService.js'; import { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js'; import { CodeWindow, mainWindow } from '../../../../base/browser/window.js'; -import { IProductService } from '../../../../platform/product/common/productService.js'; -import { IWorkbenchContribution } from '../../../common/contributions.js'; -import { IWorkbenchAssignmentService } from '../../../services/assignment/common/assignmentService.js'; -import { Disposable } from '../../../../base/common/lifecycle.js'; export class NativeTitlebarPart extends BrowserTitlebarPart { @@ -284,50 +280,3 @@ export class NativeTitleService extends BrowserTitleService { return this.instantiationService.createInstance(AuxiliaryNativeTitlebarPart, container, editorGroupsContainer, this.mainPart); } } - -export class LinuxCustomTitlebarExperiment extends Disposable implements IWorkbenchContribution { - - static readonly ID = 'workbench.contrib.linuxCustomTitlebarExperiment'; - - private readonly treatment = this.assignmentService.getTreatment('config.window.experimentalTitleBarStyle'); - - constructor( - @IProductService productService: IProductService, - @IConfigurationService private readonly configurationService: IConfigurationService, - @INativeHostService private readonly nativeHostService: INativeHostService, - @IWorkbenchAssignmentService private readonly assignmentService: IWorkbenchAssignmentService - ) { - super(); - - if (isLinux && productService.quality === 'stable') { - this.handleDefaultTitlebarStyle(); // TODO@bpasero remove me eventually once settled - } - } - - private handleDefaultTitlebarStyle(): void { - this.updateDefaultTitlebarStyle(); - this._register(this.configurationService.onDidChangeConfiguration(e => { - if (e.affectsConfiguration('window.titleBarStyle')) { - this.updateDefaultTitlebarStyle(); - } - })); - } - - private async updateDefaultTitlebarStyle(): Promise { - const titleBarStyle = this.configurationService.inspect('window.titleBarStyle'); - - let titleBarStyleOverride: 'custom' | undefined; - if (titleBarStyle.applicationValue || titleBarStyle.userValue) { - // configured by user or application: clear override - titleBarStyleOverride = undefined; - } else { - // not configured: set override if experiment is active - const value = await this.treatment; - if (value === 'custom') { - titleBarStyleOverride = 'custom'; - } - } - - await this.nativeHostService.overrideDefaultTitlebarStyle(titleBarStyleOverride); - } -} diff --git a/src/vs/workbench/test/electron-sandbox/workbenchTestServices.ts b/src/vs/workbench/test/electron-sandbox/workbenchTestServices.ts index ee1302e17fc..431160fe73d 100644 --- a/src/vs/workbench/test/electron-sandbox/workbenchTestServices.ts +++ b/src/vs/workbench/test/electron-sandbox/workbenchTestServices.ts @@ -159,7 +159,6 @@ export class TestNativeHostService implements INativeHostService { async windowsGetStringRegKey(hive: 'HKEY_CURRENT_USER' | 'HKEY_LOCAL_MACHINE' | 'HKEY_CLASSES_ROOT' | 'HKEY_USERS' | 'HKEY_CURRENT_CONFIG', path: string, name: string): Promise { return undefined; } async profileRenderer(): Promise { throw new Error(); } async getScreenshot(): Promise { return undefined; } - async overrideDefaultTitlebarStyle(style: 'native' | 'custom' | undefined): Promise { } } export class TestExtensionTipsService extends AbstractNativeExtensionTipsService {