diff --git a/src/vs/code/electron-browser/sharedProcessMain.ts b/src/vs/code/electron-browser/sharedProcessMain.ts index adaeba1139717de0f38b5672da95961d06ed02f7..5388d58ef3419e52f45e948f226a6ceea9111586 100644 --- a/src/vs/code/electron-browser/sharedProcessMain.ts +++ b/src/vs/code/electron-browser/sharedProcessMain.ts @@ -33,7 +33,7 @@ import { ChoiceChannelClient } from 'vs/platform/message/common/messageIpc'; import { IWindowsService } from 'vs/platform/windows/common/windows'; import { WindowsChannelClient } from 'vs/platform/windows/common/windowsIpc'; import { ipcRenderer } from 'electron'; -import { IDisposable, dispose } from "vs/base/common/lifecycle"; +import { IDisposable, dispose } from 'vs/base/common/lifecycle'; interface ISharedProcessInitData { sharedIPCHandle: string; diff --git a/src/vs/code/electron-main/app.ts b/src/vs/code/electron-main/app.ts index 9cc2c217653584fa14c70b6513f77758e9d054d4..ac163efc5d2158302c9f3ba3f583432b52d056d2 100644 --- a/src/vs/code/electron-main/app.ts +++ b/src/vs/code/electron-main/app.ts @@ -10,7 +10,7 @@ import * as platform from 'vs/base/common/platform'; import { WindowsManager } from 'vs/code/electron-main/windows'; import { IWindowsService, OpenContext } from 'vs/platform/windows/common/windows'; import { WindowsChannel } from 'vs/platform/windows/common/windowsIpc'; -import { WindowsService, IWindowsMainService } from 'vs/platform/windows/electron-main/windowsService'; +import { WindowsService } from 'vs/platform/windows/electron-main/windowsService'; import { ILifecycleService } from 'vs/platform/lifecycle/electron-main/lifecycleMain'; import { CodeMenu } from 'vs/code/electron-main/menus'; import { getShellEnvironment } from 'vs/code/node/shellEnv'; @@ -44,6 +44,7 @@ import pkg from 'vs/platform/node/package'; import { IDisposable, dispose } from 'vs/base/common/lifecycle'; import { ConfigurationService } from 'vs/platform/configuration/node/configurationService'; import { TPromise } from "vs/base/common/winjs.base"; +import { IWindowsMainService } from "vs/platform/windows/electron-main/windows"; export class CodeApplication { private toDispose: IDisposable[]; diff --git a/src/vs/code/electron-main/keyboard.ts b/src/vs/code/electron-main/keyboard.ts index 84608f5507dadba4af58bc951c7cad2d92661874..34b6a905e9c6b0bca8bc9c11cd0db4655fbae2b2 100644 --- a/src/vs/code/electron-main/keyboard.ts +++ b/src/vs/code/electron-main/keyboard.ts @@ -12,9 +12,9 @@ import { IStorageService } from 'vs/platform/storage/node/storage'; import Event, { Emitter, once } from 'vs/base/common/event'; import { ConfigWatcher } from 'vs/base/node/config'; import { IUserFriendlyKeybinding } from 'vs/platform/keybinding/common/keybinding'; -import { IEnvironmentService } from "vs/platform/environment/common/environment"; -import { IWindowsMainService } from "vs/platform/windows/electron-main/windowsService"; +import { IEnvironmentService } from 'vs/platform/environment/common/environment'; import { ipcMain as ipc } from 'electron'; +import { IWindowsMainService } from "vs/platform/windows/electron-main/windows"; export class KeyboardLayoutMonitor { diff --git a/src/vs/code/electron-main/launch.ts b/src/vs/code/electron-main/launch.ts index 17c9dd0122374e8010a936b2fd54bdcdb087b1eb..b3ad62b18fb659b1fdc0f1ffc8c4be7ae30dbe1a 100644 --- a/src/vs/code/electron-main/launch.ts +++ b/src/vs/code/electron-main/launch.ts @@ -13,8 +13,8 @@ import { IProcessEnvironment } from 'vs/base/common/platform'; import { ParsedArgs } from 'vs/platform/environment/common/environment'; import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; import { once } from 'vs/base/common/event'; -import { OpenContext } from "vs/platform/windows/common/windows"; -import { IWindowsMainService, ICodeWindow } from "vs/platform/windows/electron-main/windowsService"; +import { OpenContext } from 'vs/platform/windows/common/windows'; +import { IWindowsMainService, ICodeWindow } from "vs/platform/windows/electron-main/windows"; export const ID = 'launchService'; export const ILaunchService = createDecorator(ID); diff --git a/src/vs/code/electron-main/menus.ts b/src/vs/code/electron-main/menus.ts index f4a6e1b79a6cec34632e9f26804ea000cdc29a72..8cc5443972127ecf18bc74c208eb49d69b3dbbc8 100644 --- a/src/vs/code/electron-main/menus.ts +++ b/src/vs/code/electron-main/menus.ts @@ -10,7 +10,7 @@ import { isMacintosh, isLinux, isWindows, language } from 'vs/base/common/platfo import * as arrays from 'vs/base/common/arrays'; import { IEnvironmentService } from 'vs/platform/environment/common/environment'; import { ipcMain as ipc, app, shell, dialog, Menu, MenuItem, BrowserWindow } from 'electron'; -import { OpenContext } from "vs/platform/windows/common/windows"; +import { OpenContext } from 'vs/platform/windows/common/windows'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { IFilesConfiguration, AutoSaveConfiguration } from 'vs/platform/files/common/files'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; @@ -18,9 +18,9 @@ import { IUpdateService, State as UpdateState } from 'vs/platform/update/common/ import product from 'vs/platform/node/product'; import { RunOnceScheduler } from 'vs/base/common/async'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { tildify } from "vs/base/common/labels"; -import { IWindowsMainService } from "vs/platform/windows/electron-main/windowsService"; +import { tildify } from 'vs/base/common/labels'; import { KeybindingsResolver } from "vs/code/electron-main/keyboard"; +import { IWindowsMainService } from "vs/platform/windows/electron-main/windows"; interface IExtensionViewlet { id: string; diff --git a/src/vs/code/electron-main/sharedProcess.ts b/src/vs/code/electron-main/sharedProcess.ts index 5004700f7eb3b06c39e8dabdbfd0ac8b256a6487..eb540858c6df35595ca13dbe454623985c523f99 100644 --- a/src/vs/code/electron-main/sharedProcess.ts +++ b/src/vs/code/electron-main/sharedProcess.ts @@ -11,8 +11,9 @@ import { TPromise } from 'vs/base/common/winjs.base'; import { IProcessEnvironment } from 'vs/base/common/platform'; import { BrowserWindow, ipcMain } from 'electron'; import { PromiseSource } from 'vs/base/common/async'; +import { ISharedProcess } from "vs/platform/windows/electron-main/windows"; -export class SharedProcess { +export class SharedProcess implements ISharedProcess { private spawnPromiseSource: PromiseSource; diff --git a/src/vs/code/electron-main/window.ts b/src/vs/code/electron-main/window.ts index dc0979736d68a6b82b44daea4870ccd1c23bb44d..36e059d804e64b4bd7e38dbc62467cd1d6da1dd8 100644 --- a/src/vs/code/electron-main/window.ts +++ b/src/vs/code/electron-main/window.ts @@ -19,11 +19,11 @@ import { IWorkbenchEditorConfiguration } from 'vs/workbench/common/editor'; import { parseArgs } from 'vs/platform/environment/node/argv'; import product from 'vs/platform/node/product'; import { getCommonHTTPHeaders } from 'vs/platform/environment/node/http'; -import { IWindowSettings, MenuBarVisibility, ReadyState } from 'vs/platform/windows/common/windows'; +import { IWindowSettings, MenuBarVisibility, IWindowConfiguration, ReadyState } from 'vs/platform/windows/common/windows'; import { IDisposable, dispose } from 'vs/base/common/lifecycle'; import { KeyboardLayoutMonitor } from 'vs/code/electron-main/keyboard'; -import { isLinux, isMacintosh, isWindows } from "vs/base/common/platform"; -import { ICodeWindow, IWindowConfiguration } from "vs/platform/windows/electron-main/windowsService"; +import { isLinux, isMacintosh, isWindows } from 'vs/base/common/platform'; +import { ICodeWindow } from "vs/platform/windows/electron-main/windows"; export interface IWindowState { width?: number; diff --git a/src/vs/code/electron-main/windows.ts b/src/vs/code/electron-main/windows.ts index 58ad622a738bdc9f8ff28f2da40dea2dbe3bf218..8a5535a98986f95fa3383eb5b276263d4d1fb8ca 100644 --- a/src/vs/code/electron-main/windows.ts +++ b/src/vs/code/electron-main/windows.ts @@ -23,14 +23,14 @@ import { ILifecycleService, UnloadReason } from 'vs/platform/lifecycle/electron- import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { ILogService } from 'vs/platform/log/common/log'; import { getPathLabel } from 'vs/base/common/labels'; -import { IWindowSettings, OpenContext } from 'vs/platform/windows/common/windows'; +import { IWindowSettings, OpenContext, IPath, IWindowConfiguration } from 'vs/platform/windows/common/windows'; import { getLastActiveWindow, findBestWindowOrFolder } from 'vs/code/node/windowsUtils'; import CommonEvent, { Emitter } from 'vs/base/common/event'; import product from 'vs/platform/node/product'; import { ITelemetryService, ITelemetryData } from 'vs/platform/telemetry/common/telemetry'; import { isParent, isEqual, isEqualOrParent } from 'vs/platform/files/common/files'; import { KeyboardLayoutMonitor } from 'vs/code/electron-main/keyboard'; -import { IPath, IWindowsMainService, IOpenConfiguration, IRecentPathsList, IWindowConfiguration } from "vs/platform/windows/electron-main/windowsService"; +import { IWindowsMainService, IOpenConfiguration, IRecentPathsList } from "vs/platform/windows/electron-main/windows"; enum WindowError { UNRESPONSIVE, diff --git a/src/vs/code/node/windowsUtils.ts b/src/vs/code/node/windowsUtils.ts index 27e8ae3fd6335ee71f64f19bfac42bd0464a5733..f7a75f9a85b0da004ecf0f8f01a54b3b9d1a7ca3 100644 --- a/src/vs/code/node/windowsUtils.ts +++ b/src/vs/code/node/windowsUtils.ts @@ -9,7 +9,7 @@ import * as path from 'path'; import * as fs from 'fs'; import * as platform from 'vs/base/common/platform'; import * as paths from 'vs/base/common/paths'; -import { OpenContext } from "vs/platform/windows/common/windows"; +import { OpenContext } from 'vs/platform/windows/common/windows'; import { isEqualOrParent } from 'vs/platform/files/common/files'; /** diff --git a/src/vs/code/test/node/windowsUtils.test.ts b/src/vs/code/test/node/windowsUtils.test.ts index e8472fd9ae9c2e815c78fbefbfc3161566dee000..026ce3040d1edf6948e31839cc9f59c319326a2e 100644 --- a/src/vs/code/test/node/windowsUtils.test.ts +++ b/src/vs/code/test/node/windowsUtils.test.ts @@ -7,7 +7,7 @@ import assert = require('assert'); import path = require('path'); import { findBestWindowOrFolder, ISimpleWindow, IBestWindowOrFolderOptions } from 'vs/code/node/windowsUtils'; -import { OpenContext } from "vs/platform/windows/common/windows"; +import { OpenContext } from 'vs/platform/windows/common/windows'; const fixturesFolder = require.toUrl('./fixtures'); diff --git a/src/vs/platform/lifecycle/electron-main/lifecycleMain.ts b/src/vs/platform/lifecycle/electron-main/lifecycleMain.ts index 8c65a896d3d00361855862c7e838125aa659029b..d89a243598dca0a32c1b0ca94690ff07c39b0495 100644 --- a/src/vs/platform/lifecycle/electron-main/lifecycleMain.ts +++ b/src/vs/platform/lifecycle/electron-main/lifecycleMain.ts @@ -12,8 +12,8 @@ import { ILogService } from 'vs/platform/log/common/log'; import { IStorageService } from 'vs/platform/storage/node/storage'; import Event, { Emitter } from 'vs/base/common/event'; import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { ICodeWindow } from "vs/platform/windows/electron-main/windows"; import { ReadyState } from "vs/platform/windows/common/windows"; -import { ICodeWindow } from "vs/platform/windows/electron-main/windowsService"; export const ILifecycleService = createDecorator('lifecycleService'); diff --git a/src/vs/platform/windows/common/windows.ts b/src/vs/platform/windows/common/windows.ts index 844ce3a9aa0e46b42e2f15e9a87a923e16608552..ac16cd0c60a415bfb71bd29f64b5b97eef405982 100644 --- a/src/vs/platform/windows/common/windows.ts +++ b/src/vs/platform/windows/common/windows.ts @@ -9,6 +9,8 @@ import { TPromise } from 'vs/base/common/winjs.base'; import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; import Event from 'vs/base/common/event'; import { ITelemetryData } from 'vs/platform/telemetry/common/telemetry'; +import { IProcessEnvironment } from "vs/base/common/platform"; +import { ParsedArgs } from "vs/platform/environment/common/environment"; export const IWindowsService = createDecorator('windowsService'); @@ -109,6 +111,27 @@ export interface IWindowSettings { enableMenuBarMnemonics: boolean; } +export enum OpenContext { + + // opening when running from the command line + CLI, + + // macOS only: opening from the dock (also when opening files to a running instance from desktop) + DOCK, + + // opening from the main application window + MENU, + + // opening from a file or folder dialog + DIALOG, + + // opening from the OS's UI + DESKTOP, + + // opening through the API + API +} + export enum ReadyState { /** @@ -132,23 +155,50 @@ export enum ReadyState { READY } -export enum OpenContext { +export interface IPath { - // opening when running from the command line - CLI, + // the workspace spath for a Code instance which can be null + workspacePath?: string; - // macOS only: opening from the dock (also when opening files to a running instance from desktop) - DOCK, + // the file path to open within a Code instance + filePath?: string; - // opening from the main application window - MENU, + // the line number in the file path to open + lineNumber?: number; - // opening from a file or folder dialog - DIALOG, + // the column number in the file path to open + columnNumber?: number; - // opening from the OS's UI - DESKTOP, + // indicator to create the file path in the Code instance + createFilePath?: boolean; +} - // opening through the API - API +export interface IWindowConfiguration extends ParsedArgs { + appRoot: string; + execPath: string; + + userEnv: IProcessEnvironment; + + isISOKeyboard?: boolean; + + zoomLevel?: number; + fullscreen?: boolean; + highContrast?: boolean; + baseTheme?: string; + backgroundColor?: string; + accessibilitySupport?: boolean; + + isInitialStartup?: boolean; + + perfStartTime?: number; + perfAppReady?: number; + perfWindowLoadTime?: number; + + workspacePath?: string; + + filesToOpen?: IPath[]; + filesToCreate?: IPath[]; + filesToDiff?: IPath[]; + + nodeCachedDataDir: string; } \ No newline at end of file diff --git a/src/vs/platform/windows/electron-main/windows.ts b/src/vs/platform/windows/electron-main/windows.ts new file mode 100644 index 0000000000000000000000000000000000000000..f093d694f0ce5b2d7a467d707a265121a61ec51a --- /dev/null +++ b/src/vs/platform/windows/electron-main/windows.ts @@ -0,0 +1,97 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +'use strict'; + +import { TPromise } from 'vs/base/common/winjs.base'; +import { OpenContext, IWindowConfiguration, ReadyState, IPath } from 'vs/platform/windows/common/windows'; +import { ParsedArgs } from 'vs/platform/environment/common/environment'; +import Event from 'vs/base/common/event'; +import { ITelemetryData } from 'vs/platform/telemetry/common/telemetry'; +import { createDecorator } from "vs/platform/instantiation/common/instantiation"; +import { IProcessEnvironment } from "vs/base/common/platform"; + +export interface ICodeWindow { + id: number; + win: Electron.BrowserWindow; + config: IWindowConfiguration; + openedWorkspacePath: string; + + readyState: ReadyState; + + close(): void; + + send(channel: string, ...args: any[]): void; + sendWhenReady(channel: string, ...args: any[]): void; + + toggleFullScreen(): void; + hasHiddenTitleBarStyle(): boolean; + setRepresentedFilename(name: string): void; + getRepresentedFilename(): string; + onWindowTitleDoubleClick(): void; +} + +export const IWindowsMainService = createDecorator('windowsMainService'); + +export interface IWindowsMainService { + _serviceBrand: any; + + // events + onWindowReady: Event; + onWindowClose: Event; + onWindowReload: Event; + onPathsOpen: Event; + onRecentPathsChange: Event; + + // methods + ready(initialUserEnv: IProcessEnvironment): void; + reload(win: ICodeWindow, cli?: ParsedArgs): void; + open(openConfig: IOpenConfiguration): ICodeWindow[]; + openExtensionDevelopmentHostWindow(openConfig: IOpenConfiguration): void; + openFileFolderPicker(forceNewWindow?: boolean, data?: ITelemetryData): void; + openFilePicker(forceNewWindow?: boolean, path?: string, window?: ICodeWindow, data?: ITelemetryData): void; + openFolderPicker(forceNewWindow?: boolean, window?: ICodeWindow, data?: ITelemetryData): void; + focusLastActive(cli: ParsedArgs, context: OpenContext): ICodeWindow; + getLastActiveWindow(): ICodeWindow; + findWindow(workspacePath: string, filePath?: string, extensionDevelopmentPath?: string): ICodeWindow; + openNewWindow(context: OpenContext): void; + sendToFocused(channel: string, ...args: any[]): void; + sendToAll(channel: string, payload: any, windowIdsToIgnore?: number[]): void; + getFocusedWindow(): ICodeWindow; + getWindowById(windowId: number): ICodeWindow; + getWindows(): ICodeWindow[]; + getWindowCount(): number; + addToRecentPathsList(paths: { path: string; isFile?: boolean; }[]): void; + getRecentPathsList(workspacePath?: string, filesToOpen?: IPath[]): IRecentPathsList; + removeFromRecentPathsList(path: string): void; + removeFromRecentPathsList(paths: string[]): void; + clearRecentPathsList(): void; + updateWindowsJumpList(): void; + quit(): void; +} + +export interface IOpenConfiguration { + context: OpenContext; + cli: ParsedArgs; + userEnv?: IProcessEnvironment; + pathsToOpen?: string[]; + preferNewWindow?: boolean; + forceNewWindow?: boolean; + forceReuseWindow?: boolean; + forceEmpty?: boolean; + windowToUse?: ICodeWindow; + diffMode?: boolean; + initialStartup?: boolean; +} + +export interface IRecentPathsList { + folders: string[]; + files: string[]; +} + +export interface ISharedProcess { + whenReady(): TPromise; + toggle(): void; +} \ No newline at end of file diff --git a/src/vs/platform/windows/electron-main/windowsService.ts b/src/vs/platform/windows/electron-main/windowsService.ts index 4850b5a9a22ba1e17aec295b71af4dbf46b638e7..2838717da327870a81c902a492e0e733100d3236 100644 --- a/src/vs/platform/windows/electron-main/windowsService.ts +++ b/src/vs/platform/windows/electron-main/windowsService.ts @@ -9,147 +9,15 @@ import { TPromise } from 'vs/base/common/winjs.base'; import { IDisposable, dispose } from 'vs/base/common/lifecycle'; import { assign } from 'vs/base/common/objects'; import URI from 'vs/base/common/uri'; -import { IWindowsService, OpenContext, ReadyState } from 'vs/platform/windows/common/windows'; -import { IEnvironmentService, ParsedArgs } from 'vs/platform/environment/common/environment'; +import { IWindowsService, OpenContext } from 'vs/platform/windows/common/windows'; +import { IEnvironmentService } from 'vs/platform/environment/common/environment'; import { shell, crashReporter, app } from 'electron'; import Event, { chain } from 'vs/base/common/event'; import { fromEventEmitter } from 'vs/base/node/event'; import { IURLService } from 'vs/platform/url/common/url'; import { ITelemetryData } from 'vs/platform/telemetry/common/telemetry'; import { ILifecycleService } from "vs/platform/lifecycle/electron-main/lifecycleMain"; -import { createDecorator } from "vs/platform/instantiation/common/instantiation"; -import { IProcessEnvironment } from "vs/base/common/platform"; - -export interface ICodeWindow { - id: number; - win: Electron.BrowserWindow; - config: IWindowConfiguration; - openedWorkspacePath: string; - - readyState: ReadyState; - - close(): void; - - send(channel: string, ...args: any[]): void; - sendWhenReady(channel: string, ...args: any[]): void; - - toggleFullScreen(): void; - hasHiddenTitleBarStyle(): boolean; - setRepresentedFilename(name: string): void; - getRepresentedFilename(): string; - onWindowTitleDoubleClick(): void; -} - -export interface IWindowConfiguration extends ParsedArgs { - appRoot: string; - execPath: string; - - userEnv: IProcessEnvironment; - - isISOKeyboard?: boolean; - - zoomLevel?: number; - fullscreen?: boolean; - highContrast?: boolean; - baseTheme?: string; - backgroundColor?: string; - accessibilitySupport?: boolean; - - isInitialStartup?: boolean; - - perfStartTime?: number; - perfAppReady?: number; - perfWindowLoadTime?: number; - - workspacePath?: string; - - filesToOpen?: IPath[]; - filesToCreate?: IPath[]; - filesToDiff?: IPath[]; - - nodeCachedDataDir: string; -} - -export interface ISharedProcess { - whenReady(): TPromise; - toggle(): void; -} - -export const IWindowsMainService = createDecorator('windowsMainService'); - -export interface IWindowsMainService { - _serviceBrand: any; - - // events - onWindowReady: Event; - onWindowClose: Event; - onWindowReload: Event; - onPathsOpen: Event; - onRecentPathsChange: Event; - - // methods - ready(initialUserEnv: IProcessEnvironment): void; - reload(win: ICodeWindow, cli?: ParsedArgs): void; - open(openConfig: IOpenConfiguration): ICodeWindow[]; - openExtensionDevelopmentHostWindow(openConfig: IOpenConfiguration): void; - openFileFolderPicker(forceNewWindow?: boolean, data?: ITelemetryData): void; - openFilePicker(forceNewWindow?: boolean, path?: string, window?: ICodeWindow, data?: ITelemetryData): void; - openFolderPicker(forceNewWindow?: boolean, window?: ICodeWindow, data?: ITelemetryData): void; - focusLastActive(cli: ParsedArgs, context: OpenContext): ICodeWindow; - getLastActiveWindow(): ICodeWindow; - findWindow(workspacePath: string, filePath?: string, extensionDevelopmentPath?: string): ICodeWindow; - openNewWindow(context: OpenContext): void; - sendToFocused(channel: string, ...args: any[]): void; - sendToAll(channel: string, payload: any, windowIdsToIgnore?: number[]): void; - getFocusedWindow(): ICodeWindow; - getWindowById(windowId: number): ICodeWindow; - getWindows(): ICodeWindow[]; - getWindowCount(): number; - addToRecentPathsList(paths: { path: string; isFile?: boolean; }[]): void; - getRecentPathsList(workspacePath?: string, filesToOpen?: IPath[]): IRecentPathsList; - removeFromRecentPathsList(path: string): void; - removeFromRecentPathsList(paths: string[]): void; - clearRecentPathsList(): void; - updateWindowsJumpList(): void; - quit(): void; -} - -export interface IPath { - - // the workspace spath for a Code instance which can be null - workspacePath?: string; - - // the file path to open within a Code instance - filePath?: string; - - // the line number in the file path to open - lineNumber?: number; - - // the column number in the file path to open - columnNumber?: number; - - // indicator to create the file path in the Code instance - createFilePath?: boolean; -} - -export interface IOpenConfiguration { - context: OpenContext; - cli: ParsedArgs; - userEnv?: IProcessEnvironment; - pathsToOpen?: string[]; - preferNewWindow?: boolean; - forceNewWindow?: boolean; - forceReuseWindow?: boolean; - forceEmpty?: boolean; - windowToUse?: ICodeWindow; - diffMode?: boolean; - initialStartup?: boolean; -} - -export interface IRecentPathsList { - folders: string[]; - files: string[]; -} +import { IWindowsMainService, ISharedProcess } from "vs/platform/windows/electron-main/windows"; export class WindowsService implements IWindowsService, IDisposable {