aux window - introduce main process service and use in some cases

This commit is contained in:
Benjamin Pasero
2023-10-11 09:23:08 +02:00
parent 7703920940
commit 0c52fb443b
6 changed files with 148 additions and 63 deletions
+7 -3
View File
@@ -118,7 +118,8 @@ import { ElectronPtyHostStarter } from 'vs/platform/terminal/electron-main/elect
import { PtyHostService } from 'vs/platform/terminal/node/ptyHostService';
import { NODE_REMOTE_RESOURCE_CHANNEL_NAME, NODE_REMOTE_RESOURCE_IPC_METHOD_NAME, NodeRemoteResourceResponse, NodeRemoteResourceRouter } from 'vs/platform/remote/common/electronRemoteResources';
import { Lazy } from 'vs/base/common/lazy';
import { AuxiliaryWindow } from 'vs/platform/windows/electron-main/auxiliaryWindow';
import { IAuxiliaryWindowsMainService } from 'vs/platform/auxiliaryWindow/electron-main/auxiliaryWindows';
import { AuxiliaryWindowsMainService } from 'vs/platform/auxiliaryWindow/electron-main/auxiliaryWindowsMainService';
/**
* The main VS Code application. There will only ever be one instance,
@@ -132,6 +133,7 @@ export class CodeApplication extends Disposable {
};
private windowsMainService: IWindowsMainService | undefined;
private auxiliaryAindowsMainService: IAuxiliaryWindowsMainService | undefined;
private nativeHostMainService: INativeHostMainService | undefined;
constructor(
@@ -386,7 +388,7 @@ export class CodeApplication extends Disposable {
// Child Window: delegate to `AuxiliaryWindow` class
const isChildWindow = contents?.opener?.url.startsWith(`${Schemas.vscodeFileResource}://${VSCODE_AUTHORITY}/`);
if (isChildWindow) {
this.mainInstantiationService.createInstance(AuxiliaryWindow, contents);
this.auxiliaryAindowsMainService?.registerWindow(contents);
}
// Block any in-page navigation
@@ -406,7 +408,7 @@ export class CodeApplication extends Disposable {
return {
action: 'allow',
overrideBrowserWindowOptions: AuxiliaryWindow.open(this.mainInstantiationService)
overrideBrowserWindowOptions: this.auxiliaryAindowsMainService?.createWindow()
};
}
@@ -992,6 +994,7 @@ export class CodeApplication extends Disposable {
// Windows
services.set(IWindowsMainService, new SyncDescriptor(WindowsMainService, [machineId, this.userEnv], false));
services.set(IAuxiliaryWindowsMainService, new SyncDescriptor(AuxiliaryWindowsMainService, undefined, false));
// Dialogs
const dialogMainService = new DialogMainService(this.logService, this.productService);
@@ -1210,6 +1213,7 @@ export class CodeApplication extends Disposable {
private async openFirstWindow(accessor: ServicesAccessor, initialProtocolUrls: IInitialProtocolUrls | undefined): Promise<ICodeWindow[]> {
const windowsMainService = this.windowsMainService = accessor.get(IWindowsMainService);
this.auxiliaryAindowsMainService = accessor.get(IAuxiliaryWindowsMainService);
const context = isLaunchedFromCli(process.env) ? OpenContext.CLI : OpenContext.DESKTOP;
const args = this.environmentMainService.args;