mirror of
https://github.com/microsoft/vscode.git
synced 2026-05-18 14:19:42 +01:00
linux - cleanup from custom title experiment (#241379)
This commit is contained in:
@@ -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));
|
||||
|
||||
|
||||
@@ -110,9 +110,6 @@ export interface ICommonNativeHostService {
|
||||
*/
|
||||
focusWindow(options?: INativeHostOptions & { force?: boolean }): Promise<void>;
|
||||
|
||||
// Titlebar default style override
|
||||
overrideDefaultTitlebarStyle(style: 'custom' | undefined): Promise<void>;
|
||||
|
||||
// Dialogs
|
||||
showMessageBox(options: MessageBoxOptions & INativeHostOptions): Promise<MessageBoxReturnValue>;
|
||||
showSaveDialog(options: SaveDialogOptions & INativeHostOptions): Promise<SaveDialogReturnValue>;
|
||||
|
||||
@@ -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<ICommonNativeHostService, Promise<unknown> /* 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<void> {
|
||||
if (style === 'custom') {
|
||||
this.stateService.setItem('window.titleBarStyleOverride', style);
|
||||
} else {
|
||||
this.stateService.removeItem('window.titleBarStyleOverride');
|
||||
}
|
||||
}
|
||||
|
||||
//#endregion
|
||||
|
||||
|
||||
|
||||
@@ -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[];
|
||||
|
||||
|
||||
@@ -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(),
|
||||
|
||||
@@ -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<boolean>('statusBarFocused', f
|
||||
|
||||
//#region < --- Title Bar --- >
|
||||
|
||||
export const TitleBarStyleContext = new RawContextKey<string>('titleBarStyle', isLinux && product.quality === 'stable' ? 'native' : 'custom', localize('titleBarStyle', "Style of the window title bar"));
|
||||
export const TitleBarStyleContext = new RawContextKey<string>('titleBarStyle', 'custom', localize('titleBarStyle', "Style of the window title bar"));
|
||||
export const TitleBarVisibleContext = new RawContextKey<boolean>('titleBarVisible', false, localize('titleBarVisible', "Whether the title bar is visible"));
|
||||
|
||||
//#endregion
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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<IConfigurationRegistry>(Extensions.Configuration);
|
||||
configurationRegistry.registerDefaultConfigurations([{
|
||||
overrides: {
|
||||
'window.titleBarStyle': 'custom',
|
||||
'window.customTitleBarVisibility': 'auto'
|
||||
}
|
||||
}]);
|
||||
}
|
||||
}
|
||||
|
||||
private reviveUris() {
|
||||
|
||||
@@ -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<void> {
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<string | undefined> { return undefined; }
|
||||
async profileRenderer(): Promise<any> { throw new Error(); }
|
||||
async getScreenshot(): Promise<ArrayBufferLike | undefined> { return undefined; }
|
||||
async overrideDefaultTitlebarStyle(style: 'native' | 'custom' | undefined): Promise<void> { }
|
||||
}
|
||||
|
||||
export class TestExtensionTipsService extends AbstractNativeExtensionTipsService {
|
||||
|
||||
Reference in New Issue
Block a user