diff --git a/src/vs/code/electron-browser/sharedProcess/sharedProcessMain.ts b/src/vs/code/electron-browser/sharedProcess/sharedProcessMain.ts index bd60d1fe56d..1a39a5a0800 100644 --- a/src/vs/code/electron-browser/sharedProcess/sharedProcessMain.ts +++ b/src/vs/code/electron-browser/sharedProcess/sharedProcessMain.ts @@ -68,7 +68,7 @@ import { ExtensionTipsService } from 'vs/platform/extensionManagement/electron-s import { UserDataSyncMachinesService, IUserDataSyncMachinesService } from 'vs/platform/userDataSync/common/userDataSyncMachines'; import { IExtensionRecommendationNotificationService } from 'vs/platform/extensionRecommendations/common/extensionRecommendations'; import { ExtensionRecommendationNotificationServiceChannelClient } from 'vs/platform/extensionRecommendations/electron-sandbox/extensionRecommendationsIpc'; -import { ActiveWindowManager } from 'vs/platform/windows/electron-sandbox/windowTracker'; +import { ActiveWindowManager } from 'vs/platform/windows/common/windowTracker'; export interface ISharedProcessConfiguration { readonly machineId: string; diff --git a/src/vs/code/electron-main/app.ts b/src/vs/code/electron-main/app.ts index dfb466829cf..357b4476797 100644 --- a/src/vs/code/electron-main/app.ts +++ b/src/vs/code/electron-main/app.ts @@ -36,7 +36,6 @@ import product from 'vs/platform/product/common/product'; import { ProxyAuthHandler } from 'vs/code/electron-main/auth'; import { Disposable } from 'vs/base/common/lifecycle'; import { IWindowsMainService, ICodeWindow } from 'vs/platform/windows/electron-main/windows'; -import { ActiveWindowManager } from 'vs/platform/windows/electron-main/windowTracker'; import { URI } from 'vs/base/common/uri'; import { hasWorkspaceFileExtension, IWorkspacesService } from 'vs/platform/workspaces/common/workspaces'; import { WorkspacesService } from 'vs/platform/workspaces/electron-main/workspacesService'; @@ -83,6 +82,7 @@ import { stripComments } from 'vs/base/common/json'; import { generateUuid } from 'vs/base/common/uuid'; import { VSBuffer } from 'vs/base/common/buffer'; import { EncryptionMainService, IEncryptionMainService } from 'vs/platform/encryption/electron-main/encryptionMainService'; +import { ActiveWindowManager } from 'vs/platform/windows/common/windowTracker'; export class CodeApplication extends Disposable { private windowsMainService: IWindowsMainService | undefined; @@ -663,7 +663,7 @@ export class CodeApplication extends Disposable { }); // Create a URL handler which forwards to the last active window - const activeWindowManager = new ActiveWindowManager(nativeHostMainService); + const activeWindowManager = new ActiveWindowManager({ onWindowOpen: nativeHostMainService.onWindowOpen, onWindowFocus: nativeHostMainService.onWindowFocus, getActiveWindowId: () => nativeHostMainService.getActiveWindowId(-1) }); const activeWindowRouter = new StaticRouter(ctx => activeWindowManager.getActiveClientId().then(id => ctx === id)); const urlHandlerRouter = new URLHandlerRouter(activeWindowRouter); const urlHandlerChannel = electronIpcServer.getChannel('urlHandler', urlHandlerRouter); diff --git a/src/vs/platform/windows/electron-sandbox/windowTracker.ts b/src/vs/platform/windows/common/windowTracker.ts similarity index 84% rename from src/vs/platform/windows/electron-sandbox/windowTracker.ts rename to src/vs/platform/windows/common/windowTracker.ts index 92d3e21c4b6..bca9fcf641f 100644 --- a/src/vs/platform/windows/electron-sandbox/windowTracker.ts +++ b/src/vs/platform/windows/common/windowTracker.ts @@ -6,7 +6,6 @@ import { Event } from 'vs/base/common/event'; import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; import { CancelablePromise, createCancelablePromise } from 'vs/base/common/async'; -import { INativeHostService } from 'vs/platform/native/electron-sandbox/native'; export class ActiveWindowManager extends Disposable { @@ -15,15 +14,17 @@ export class ActiveWindowManager extends Disposable { private activeWindowId: number | undefined; - constructor(@INativeHostService nativeHostService: INativeHostService) { + constructor({ onWindowOpen, onWindowFocus, getActiveWindowId }: { + onWindowOpen: Event, onWindowFocus: Event, getActiveWindowId(): Promise + }) { super(); // remember last active window id upon events - const onActiveWindowChange = Event.latch(Event.any(nativeHostService.onWindowOpen, nativeHostService.onWindowFocus)); + const onActiveWindowChange = Event.latch(Event.any(onWindowOpen, onWindowFocus)); onActiveWindowChange(this.setActiveWindow, this, this.disposables); // resolve current active window - this.firstActiveWindowIdPromise = createCancelablePromise(() => nativeHostService.getActiveWindowId()); + this.firstActiveWindowIdPromise = createCancelablePromise(() => getActiveWindowId()); (async () => { try { const windowId = await this.firstActiveWindowIdPromise; diff --git a/src/vs/platform/windows/electron-main/windowTracker.ts b/src/vs/platform/windows/electron-main/windowTracker.ts deleted file mode 100644 index 42b586f81b9..00000000000 --- a/src/vs/platform/windows/electron-main/windowTracker.ts +++ /dev/null @@ -1,51 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import { Event } from 'vs/base/common/event'; -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { CancelablePromise, createCancelablePromise } from 'vs/base/common/async'; -import { INativeHostMainService } from 'vs/platform/native/electron-main/nativeHostMainService'; - -export class ActiveWindowManager extends Disposable { - - private readonly disposables = this._register(new DisposableStore()); - private firstActiveWindowIdPromise: CancelablePromise | undefined; - - private activeWindowId: number | undefined; - - constructor(@INativeHostMainService nativeHostMainService: INativeHostMainService) { - super(); - - // remember last active window id upon events - const onActiveWindowChange = Event.latch(Event.any(nativeHostMainService.onWindowOpen, nativeHostMainService.onWindowFocus)); - onActiveWindowChange(this.setActiveWindow, this, this.disposables); - - // resolve current active window - this.firstActiveWindowIdPromise = createCancelablePromise(() => nativeHostMainService.getActiveWindowId(-1)); - (async () => { - try { - const windowId = await this.firstActiveWindowIdPromise; - this.activeWindowId = (typeof this.activeWindowId === 'number') ? this.activeWindowId : windowId; - } finally { - this.firstActiveWindowIdPromise = undefined; - } - })(); - } - - private setActiveWindow(windowId: number | undefined) { - if (this.firstActiveWindowIdPromise) { - this.firstActiveWindowIdPromise.cancel(); - this.firstActiveWindowIdPromise = undefined; - } - - this.activeWindowId = windowId; - } - - async getActiveClientId(): Promise { - const id = this.firstActiveWindowIdPromise ? (await this.firstActiveWindowIdPromise) : this.activeWindowId; - - return `window:${id}`; - } -}