diff --git a/src/service-override/keybindings.ts b/src/service-override/keybindings.ts index 73b37c21..40405a0c 100644 --- a/src/service-override/keybindings.ts +++ b/src/service-override/keybindings.ts @@ -64,6 +64,10 @@ async function updateUserKeybindings(keybindingsJson: string): Promise { ) } +export interface LockKeyCodesOverride { + (keyCodes: string[], next: (keyCodes: string[]) => void): void +} + class DynamicWorkbenchKeybindingService extends WorkbenchKeybindingService implements DynamicKeybindingService @@ -72,6 +76,7 @@ class DynamicWorkbenchKeybindingService constructor( private shouldUseGlobalKeybindings: () => boolean, + private _lockKeyCodesOverride: LockKeyCodesOverride, @IContextKeyService contextKeyService: IContextKeyService, @ICommandService commandService: ICommandService, @ITelemetryService telemetryService: ITelemetryService, @@ -157,20 +162,31 @@ class DynamicWorkbenchKeybindingService ...this.keybindingProviders.flatMap((provider) => provider.provideKeybindings()) ] } + + protected override lockKeyCodes(keyCodes: string[]): void { + this._lockKeyCodesOverride(keyCodes, (keyCodes) => super.lockKeyCodes(keyCodes)) + } } -interface KeybindingsProps { +export interface KeybindingsProps { shouldUseGlobalKeybindings?: () => boolean + /** + * Allows to override the key code lock (for instance, ['Escape'] during full screen) + */ + lockKeyCodesOverride?: LockKeyCodesOverride } export default function getServiceOverride({ - shouldUseGlobalKeybindings = () => false + shouldUseGlobalKeybindings = () => false, + lockKeyCodesOverride = (keyCodes, next) => { + next(keyCodes) + } }: KeybindingsProps = {}): IEditorOverrideServices { return { ...getFileServiceOverride(), [IKeybindingService.toString()]: new SyncDescriptor( DynamicWorkbenchKeybindingService, - [shouldUseGlobalKeybindings], + [shouldUseGlobalKeybindings, lockKeyCodesOverride], false ), [IKeyboardLayoutService.toString()]: new SyncDescriptor(BrowserKeyboardLayoutService, [], true), diff --git a/vscode-patches/0067-feat-prevent-IDE-from-entering-fullscreen-if-not-occ.patch b/vscode-patches/0067-feat-prevent-IDE-from-entering-fullscreen-if-not-occ.patch index 95085509..d5d4f649 100644 --- a/vscode-patches/0067-feat-prevent-IDE-from-entering-fullscreen-if-not-occ.patch +++ b/vscode-patches/0067-feat-prevent-IDE-from-entering-fullscreen-if-not-occ.patch @@ -1,21 +1,21 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Jean-Damien Thevenoux -Date: Fri, 21 Nov 2025 18:15:16 +0100 +From: Gaspar Chefdeville +Date: Wed, 9 Jul 2025 17:25:14 +0200 Subject: [PATCH] feat: prevent IDE from entering fullscreen if not occupying the entire screen --- - src/vs/base/browser/dom.ts | 32 ++++++++++++++++--- - src/vs/workbench/browser/layout.ts | 5 +-- + src/vs/base/browser/dom.ts | 34 ++++++++++++++++--- + src/vs/workbench/browser/layout.ts | 19 ++++++----- src/vs/workbench/browser/web.main.ts | 2 +- .../host/browser/browserHostService.ts | 2 +- - 4 files changed, 32 insertions(+), 9 deletions(-) + 4 files changed, 41 insertions(+), 16 deletions(-) diff --git a/src/vs/base/browser/dom.ts b/src/vs/base/browser/dom.ts -index adfb9f657ae..98cfab3ae62 100644 +index adfb9f657ae..4604c6e7aaf 100644 --- a/src/vs/base/browser/dom.ts +++ b/src/vs/base/browser/dom.ts -@@ -925,6 +925,26 @@ export function getActiveElement(_document = getActiveDocument()): Element | nul +@@ -925,6 +925,28 @@ export function getActiveElement(_document = getActiveDocument()): Element | nul return result; } @@ -27,8 +27,10 @@ index adfb9f657ae..98cfab3ae62 100644 +export function getFullscreenElement(_document = getActiveDocument()): Element | null { + const _getFullscreenElement = (node: Document | ShadowRoot): Element | null => + node.fullscreenElement ?? ++ // eslint-disable-next-line local/code-no-any-casts + (node).webkitFullscreenElement ?? -+ null ++ null; ++ + + let result = _getFullscreenElement(_document); + @@ -42,7 +44,7 @@ index adfb9f657ae..98cfab3ae62 100644 export function getRootContainer(element: Element) { let container: Node = element.getRootNode(); if (container instanceof Document) { -@@ -1699,11 +1719,11 @@ export interface IDetectedFullscreen { +@@ -1699,11 +1721,11 @@ export interface IDetectedFullscreen { guess: boolean; } @@ -52,12 +54,12 @@ index adfb9f657ae..98cfab3ae62 100644 // Browser fullscreen: use DOM APIs to detect - // eslint-disable-next-line local/code-no-any-casts - if (targetWindow.document.fullscreenElement || (targetWindow.document).webkitFullscreenElement || (targetWindow.document).webkitIsFullScreen) { -+ const fullscreenElement = getFullscreenElement(targetWindow.document) ++ const fullscreenElement = getFullscreenElement(targetWindow.document); + if (fullscreenElement === containerElement) { return { mode: DetectedFullscreenMode.DOCUMENT, guess: false }; } -@@ -1712,7 +1732,9 @@ export function detectFullscreen(targetWindow: Window): IDetectedFullscreen | nu +@@ -1712,7 +1734,9 @@ export function detectFullscreen(targetWindow: Window): IDetectedFullscreen | nu // height and comparing that to window height, we can guess // it though. @@ -68,7 +70,7 @@ index adfb9f657ae..98cfab3ae62 100644 // if the height of the window matches the screen height, we can // safely assume that the browser is fullscreen because no browser // chrome is taking height away (e.g. like toolbars). -@@ -1721,7 +1743,7 @@ export function detectFullscreen(targetWindow: Window): IDetectedFullscreen | nu +@@ -1721,7 +1745,7 @@ export function detectFullscreen(targetWindow: Window): IDetectedFullscreen | nu if (platform.isMacintosh || platform.isLinux) { // macOS and Linux do not properly report `innerHeight`, only Windows does @@ -78,24 +80,62 @@ index adfb9f657ae..98cfab3ae62 100644 // only guess that we are in fullscreen. It is also possible that // the user has turned off taskbars in the OS and the browser is diff --git a/src/vs/workbench/browser/layout.ts b/src/vs/workbench/browser/layout.ts -index 057bfdb82c9..99aa6df59fa 100644 +index 057bfdb82c9..990f04d8acd 100644 --- a/src/vs/workbench/browser/layout.ts +++ b/src/vs/workbench/browser/layout.ts -@@ -5,7 +5,7 @@ +@@ -3,10 +3,15 @@ + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ ++import { isFullscreen, isWCOEnabled, onDidChangeFullscreen } from '../../base/browser/browser.js'; ++import { addDisposableListener, computeScreenAwareSize, Dimension, EventType, getActiveDocument, getActiveElement, getActiveWindow, getClientArea, getFullscreenElement, getWindow, getWindowId, getWindows, IDimension, isActiveDocument, isAncestorUsingFlowTo, size } from '../../base/browser/dom.js'; ++import { setContainerElement } from '../../base/browser/domStylesheets.js'; ++import { Direction, ISerializableView, ISerializedGrid, ISerializedLeafNode, ISerializedNode, IViewSize, Orientation, SerializableGrid, Sizing } from '../../base/browser/ui/grid/grid.js'; ++import { CodeWindow, mainWindow } from '../../base/browser/window.js'; ++import { coalesce } from '../../base/common/arrays.js'; ++import { DeferredPromise, Promises } from '../../base/common/async.js'; ++import { Emitter, Event } from '../../base/common/event.js'; import { Disposable, DisposableMap, DisposableStore, IDisposable, toDisposable } from '../../base/common/lifecycle.js'; - import { Event, Emitter } from '../../base/common/event.js'; +-import { Event, Emitter } from '../../base/common/event.js'; -import { EventType, addDisposableListener, getClientArea, size, IDimension, isAncestorUsingFlowTo, computeScreenAwareSize, getActiveDocument, getWindows, getActiveWindow, isActiveDocument, getWindow, getWindowId, getActiveElement, Dimension } from '../../base/browser/dom.js'; -+import { EventType, addDisposableListener, getClientArea, size, IDimension, isAncestorUsingFlowTo, computeScreenAwareSize, getActiveDocument, getWindows, getActiveWindow, isActiveDocument, getWindow, getWindowId, getActiveElement, Dimension, getFullscreenElement } from '../../base/browser/dom.js'; - import { onDidChangeFullscreen, isFullscreen, isWCOEnabled } from '../../base/browser/browser.js'; +-import { onDidChangeFullscreen, isFullscreen, isWCOEnabled } from '../../base/browser/browser.js'; import { isWindows, isLinux, isMacintosh, isWeb, isIOS } from '../../base/common/platform.js'; import { EditorInputCapabilities, GroupIdentifier, isResourceEditorInput, IUntypedEditorInput, pathsToEditors } from '../common/editor.js'; + import { SidebarPart } from './parts/sidebar/sidebarPart.js'; +@@ -23,12 +28,10 @@ import { IHostService } from '../services/host/browser/host.js'; + import { IBrowserWorkbenchEnvironmentService } from '../services/environment/browser/environmentService.js'; + import { IEditorService } from '../services/editor/common/editorService.js'; + import { EditorGroupLayout, GroupOrientation, GroupsOrder, IEditorGroupsService } from '../services/editor/common/editorGroupsService.js'; +-import { SerializableGrid, ISerializableView, ISerializedGrid, Orientation, ISerializedNode, ISerializedLeafNode, Direction, IViewSize, Sizing } from '../../base/browser/ui/grid/grid.js'; + import { Part } from './part.js'; + import { IStatusbarService } from '../services/statusbar/browser/statusbar.js'; + import { IFileService } from '../../platform/files/common/files.js'; + import { isCodeEditor } from '../../editor/browser/editorBrowser.js'; +-import { coalesce } from '../../base/common/arrays.js'; + import { assertReturnsDefined } from '../../base/common/types.js'; + import { INotificationService, NotificationsFilter } from '../../platform/notification/common/notification.js'; + import { IThemeService } from '../../platform/theme/common/themeService.js'; +@@ -40,14 +43,11 @@ import { DiffEditorInput } from '../common/editor/diffEditorInput.js'; + import { mark } from '../../base/common/performance.js'; + import { IExtensionService } from '../services/extensions/common/extensions.js'; + import { ILogService } from '../../platform/log/common/log.js'; +-import { DeferredPromise, Promises } from '../../base/common/async.js'; + import { IBannerService } from '../services/banner/browser/bannerService.js'; + import { IPaneCompositePartService } from '../services/panecomposite/browser/panecomposite.js'; + import { AuxiliaryBarPart } from './parts/auxiliarybar/auxiliaryBarPart.js'; + import { ITelemetryService } from '../../platform/telemetry/common/telemetry.js'; + import { IAuxiliaryWindowService } from '../services/auxiliaryWindow/browser/auxiliaryWindowService.js'; +-import { CodeWindow, mainWindow } from '../../base/browser/window.js'; +-import { setContainerElement } from '../../base/browser/domStylesheets.js'; + + //#region Layout Implementation + @@ -1633,7 +1633,8 @@ export abstract class Layout extends Disposable implements IWorkbenchLayoutServi layout(): void { if (!this.disposed) { - this._mainContainerDimension = getClientArea(this.state.runtime.mainWindowFullscreen ? -+ const fullscreenElement = getFullscreenElement(mainWindow.document) ++ const fullscreenElement = getFullscreenElement(mainWindow.document); + this._mainContainerDimension = getClientArea(this.state.runtime.mainWindowFullscreen && this.mainContainer === fullscreenElement ? mainWindow.document.body : // in fullscreen mode, make sure to use element because this.parent, // in that case the workbench will span the entire site diff --git a/vscode-patches/0068-feat-support-loading-VSCode-in-an-iframe.patch b/vscode-patches/0068-feat-support-loading-VSCode-in-an-iframe.patch index 3cf0cf2f..6d2920ce 100644 --- a/vscode-patches/0068-feat-support-loading-VSCode-in-an-iframe.patch +++ b/vscode-patches/0068-feat-support-loading-VSCode-in-an-iframe.patch @@ -4,21 +4,90 @@ Date: Mon, 4 Aug 2025 19:03:44 +0200 Subject: [PATCH] feat: support loading VSCode in an iframe --- + src/vs/base/browser/browser.ts | 2 +- + src/vs/base/browser/canIUse.ts | 12 +++--- src/vs/base/browser/dom.ts | 39 +++++++------------ src/vs/base/browser/domStylesheets.ts | 4 +- + src/vs/base/browser/mouseEvent.ts | 3 +- + src/vs/base/browser/touch.ts | 2 +- src/vs/base/browser/window.ts | 6 ++- + src/vs/editor/browser/gpu/gpuDisposable.ts | 5 ++- + .../editor/browser/gpu/rectangleRenderer.ts | 3 +- + .../viewParts/viewLinesGpu/viewLinesGpu.ts | 3 +- + .../contrib/clipboard/browser/clipboard.ts | 3 +- + .../clipboard/browser/clipboardService.ts | 2 +- + src/vs/platform/dialogs/browser/dialog.ts | 3 +- + .../remote/browser/browserSocketFactory.ts | 2 +- src/vs/workbench/browser/window.ts | 25 ++++++++---- .../performance/browser/perfviewEditor.ts | 3 +- .../performance/browser/startupTimings.ts | 3 +- + .../contrib/remote/browser/remoteIndicator.ts | 2 +- .../browser/webWorkerExtensionHost.ts | 6 +-- + .../host/browser/browserHostService.ts | 2 +- + .../keybinding/browser/keybindingService.ts | 2 +- .../lifecycle/browser/lifecycleService.ts | 2 +- - 8 files changed, 45 insertions(+), 43 deletions(-) + .../localization/browser/localeService.ts | 5 ++- + .../request/browser/requestService.ts | 3 +- + .../electron-browser/requestService.ts | 3 +- + .../services/timer/browser/timerService.ts | 5 ++- + 26 files changed, 81 insertions(+), 69 deletions(-) +diff --git a/src/vs/base/browser/browser.ts b/src/vs/base/browser/browser.ts +index b6e9ec09fff..d8a6166878a 100644 +--- a/src/vs/base/browser/browser.ts ++++ b/src/vs/base/browser/browser.ts +@@ -98,7 +98,7 @@ export function isFullscreen(targetWindow: Window): boolean { + } + export const onDidChangeFullscreen = WindowManager.INSTANCE.onDidChangeFullscreen; + +-const userAgent = navigator.userAgent; ++const userAgent = mainWindow.navigator.userAgent; + + export const isFirefox = (userAgent.indexOf('Firefox') >= 0); + export const isWebKit = (userAgent.indexOf('AppleWebKit') >= 0); +diff --git a/src/vs/base/browser/canIUse.ts b/src/vs/base/browser/canIUse.ts +index d7c129abb27..a2895879194 100644 +--- a/src/vs/base/browser/canIUse.ts ++++ b/src/vs/base/browser/canIUse.ts +@@ -20,12 +20,12 @@ export const BrowserFeatures = { + clipboard: { + writeText: ( + platform.isNative +- || (document.queryCommandSupported && document.queryCommandSupported('copy')) +- || !!(navigator && navigator.clipboard && navigator.clipboard.writeText) ++ || (mainWindow.document.queryCommandSupported && mainWindow.document.queryCommandSupported('copy')) ++ || !!(mainWindow.navigator && mainWindow.navigator.clipboard && mainWindow.navigator.clipboard.writeText) + ), + readText: ( + platform.isNative +- || !!(navigator && navigator.clipboard && navigator.clipboard.readText) ++ || !!(mainWindow.navigator && mainWindow.navigator.clipboard && mainWindow.navigator.clipboard.readText) + ) + }, + keyboard: (() => { +@@ -33,7 +33,7 @@ export const BrowserFeatures = { + return KeyboardSupport.Always; + } + +- if ((navigator as Navigator & { keyboard?: unknown }).keyboard || browser.isSafari) { ++ if ((mainWindow.navigator as Navigator & { keyboard?: unknown }).keyboard || browser.isSafari) { + return KeyboardSupport.FullScreen; + } + +@@ -42,6 +42,6 @@ export const BrowserFeatures = { + + // 'ontouchstart' in window always evaluates to true with typescript's modern typings. This causes `window` to be + // `never` later in `window.navigator`. That's why we need the explicit `window as Window` cast +- touch: 'ontouchstart' in mainWindow || navigator.maxTouchPoints > 0, +- pointerEvents: mainWindow.PointerEvent && ('ontouchstart' in mainWindow || navigator.maxTouchPoints > 0) ++ touch: 'ontouchstart' in mainWindow || mainWindow.navigator.maxTouchPoints > 0, ++ pointerEvents: mainWindow.PointerEvent && ('ontouchstart' in mainWindow || mainWindow.navigator.maxTouchPoints > 0) + }; diff --git a/src/vs/base/browser/dom.ts b/src/vs/base/browser/dom.ts -index 98cfab3ae62..100ddac2639 100644 +index 4604c6e7aaf..f38d1d306c3 100644 --- a/src/vs/base/browser/dom.ts +++ b/src/vs/base/browser/dom.ts -@@ -1070,68 +1070,55 @@ function createHeadElement(tagName: K, co +@@ -1072,68 +1072,55 @@ function createHeadElement(tagName: K, co } export function isHTMLElement(e: unknown): e is HTMLElement { @@ -122,6 +191,40 @@ index 0782c211144..61e4c36505d 100644 shadowRootContainer = root; } } +diff --git a/src/vs/base/browser/mouseEvent.ts b/src/vs/base/browser/mouseEvent.ts +index 2f8c99ff327..f061a5f93ef 100644 +--- a/src/vs/base/browser/mouseEvent.ts ++++ b/src/vs/base/browser/mouseEvent.ts +@@ -6,6 +6,7 @@ + import * as browser from './browser.js'; + import { IframeUtils } from './iframe.js'; + import * as platform from '../common/platform.js'; ++import { mainWindow } from './window.js'; + + export interface IMouseEvent { + readonly browserEvent: MouseEvent; +@@ -145,7 +146,7 @@ export class StandardWheelEvent { + if (browser.isChrome) { + // Chrome version >= 123 contains the fix to factor devicePixelRatio into the wheel event. + // See https://chromium.googlesource.com/chromium/src.git/+/be51b448441ff0c9d1f17e0f25c4bf1ab3f11f61 +- const chromeVersionMatch = navigator.userAgent.match(/Chrome\/(\d+)/); ++ const chromeVersionMatch = mainWindow.navigator.userAgent.match(/Chrome\/(\d+)/); + const chromeMajorVersion = chromeVersionMatch ? parseInt(chromeVersionMatch[1]) : 123; + shouldFactorDPR = chromeMajorVersion <= 122; + } +diff --git a/src/vs/base/browser/touch.ts b/src/vs/base/browser/touch.ts +index ac526347c90..b71cc9c348a 100644 +--- a/src/vs/base/browser/touch.ts ++++ b/src/vs/base/browser/touch.ts +@@ -126,7 +126,7 @@ export class Gesture extends Disposable { + static isTouchDevice(): boolean { + // `'ontouchstart' in window` always evaluates to true with typescript's modern typings. This causes `window` to be + // `never` later in `window.navigator`. That's why we need the explicit `window as Window` cast +- return 'ontouchstart' in mainWindow || navigator.maxTouchPoints > 0; ++ return 'ontouchstart' in mainWindow || mainWindow.navigator.maxTouchPoints > 0; + } + + public override dispose(): void { diff --git a/src/vs/base/browser/window.ts b/src/vs/base/browser/window.ts index ab920e18349..ab318ad411d 100644 --- a/src/vs/base/browser/window.ts @@ -140,6 +243,140 @@ index ab920e18349..ab318ad411d 100644 export function isAuxiliaryWindow(obj: Window): obj is CodeWindow { if (obj === mainWindow) { +diff --git a/src/vs/editor/browser/gpu/gpuDisposable.ts b/src/vs/editor/browser/gpu/gpuDisposable.ts +index 875525be3ee..c19493b0f65 100644 +--- a/src/vs/editor/browser/gpu/gpuDisposable.ts ++++ b/src/vs/editor/browser/gpu/gpuDisposable.ts +@@ -3,16 +3,17 @@ + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + ++import { mainWindow } from '../../../base/browser/window.js'; + import type { IReference } from '../../../base/common/lifecycle.js'; + import { isFunction } from '../../../base/common/types.js'; + + export namespace GPULifecycle { + export async function requestDevice(fallback?: (message: string) => void): Promise> { + try { +- if (!navigator.gpu) { ++ if (!mainWindow.navigator.gpu) { + throw new Error('This browser does not support WebGPU'); + } +- const adapter = (await navigator.gpu.requestAdapter())!; ++ const adapter = (await mainWindow.navigator.gpu.requestAdapter())!; + if (!adapter) { + throw new Error('This browser supports WebGPU but it appears to be disabled'); + } +diff --git a/src/vs/editor/browser/gpu/rectangleRenderer.ts b/src/vs/editor/browser/gpu/rectangleRenderer.ts +index 09e68a80be8..789609790c9 100644 +--- a/src/vs/editor/browser/gpu/rectangleRenderer.ts ++++ b/src/vs/editor/browser/gpu/rectangleRenderer.ts +@@ -4,6 +4,7 @@ + *--------------------------------------------------------------------------------------------*/ + + import { getActiveWindow } from '../../../base/browser/dom.js'; ++import { mainWindow } from '../../../base/browser/window.js'; + import { Event } from '../../../base/common/event.js'; + import { IReference, MutableDisposable } from '../../../base/common/lifecycle.js'; + import type { IObservable } from '../../../base/common/observable.js'; +@@ -80,7 +81,7 @@ export class RectangleRenderer extends ViewEventHandler { + return; + } + +- const presentationFormat = navigator.gpu.getPreferredCanvasFormat(); ++ const presentationFormat = mainWindow.navigator.gpu.getPreferredCanvasFormat(); + this._ctx.configure({ + device: this._device, + format: presentationFormat, +diff --git a/src/vs/editor/browser/viewParts/viewLinesGpu/viewLinesGpu.ts b/src/vs/editor/browser/viewParts/viewLinesGpu/viewLinesGpu.ts +index 55ddb01f83d..7272069d931 100644 +--- a/src/vs/editor/browser/viewParts/viewLinesGpu/viewLinesGpu.ts ++++ b/src/vs/editor/browser/viewParts/viewLinesGpu/viewLinesGpu.ts +@@ -30,6 +30,7 @@ import { FullFileRenderStrategy } from '../../gpu/renderStrategy/fullFileRenderS + import { MutableDisposable } from '../../../../base/common/lifecycle.js'; + import type { ViewLineRenderingData } from '../../../common/viewModel.js'; + import { GlyphRasterizer } from '../../gpu/raster/glyphRasterizer.js'; ++import { mainWindow } from '../../../../base/browser/window.js'; + + const enum GlyphStorageBufferInfo { + FloatsPerEntry = 2 + 2 + 2, +@@ -114,7 +115,7 @@ export class ViewLinesGpu extends ViewPart implements IViewLines { + this._renderStrategy.value!.reset(); + })); + +- const presentationFormat = navigator.gpu.getPreferredCanvasFormat(); ++ const presentationFormat = mainWindow.navigator.gpu.getPreferredCanvasFormat(); + this._viewGpuContext.ctx.configure({ + device: this._device, + format: presentationFormat, +diff --git a/src/vs/editor/contrib/clipboard/browser/clipboard.ts b/src/vs/editor/contrib/clipboard/browser/clipboard.ts +index f795302fae8..c66d262a777 100644 +--- a/src/vs/editor/contrib/clipboard/browser/clipboard.ts ++++ b/src/vs/editor/contrib/clipboard/browser/clipboard.ts +@@ -5,6 +5,7 @@ + + import * as browser from '../../../../base/browser/browser.js'; + import { getActiveDocument, getActiveWindow } from '../../../../base/browser/dom.js'; ++import { mainWindow } from '../../../../base/browser/window.js'; + import { KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; + import * as platform from '../../../../base/common/platform.js'; + import { StopWatch } from '../../../../base/common/stopwatch.js'; +@@ -34,7 +35,7 @@ const supportsCopy = (platform.isNative || document.queryCommandSupported('copy' + // Firefox only supports navigator.clipboard.readText() in browser extensions. + // See https://developer.mozilla.org/en-US/docs/Web/API/Clipboard/readText#Browser_compatibility + // When loading over http, navigator.clipboard can be undefined. See https://github.com/microsoft/monaco-editor/issues/2313 +-const supportsPaste = (typeof navigator.clipboard === 'undefined' || browser.isFirefox) ? document.queryCommandSupported('paste') : true; ++const supportsPaste = (typeof mainWindow.navigator.clipboard === 'undefined' || browser.isFirefox) ? document.queryCommandSupported('paste') : true; + + function registerCommand(command: T): T { + command.register(); +diff --git a/src/vs/platform/clipboard/browser/clipboardService.ts b/src/vs/platform/clipboard/browser/clipboardService.ts +index 358aa682cda..b41a1f1346b 100644 +--- a/src/vs/platform/clipboard/browser/clipboardService.ts ++++ b/src/vs/platform/clipboard/browser/clipboardService.ts +@@ -52,7 +52,7 @@ export class BrowserClipboardService extends Disposable implements IClipboardSer + + async readImage(): Promise { + try { +- const clipboardItems = await navigator.clipboard.read(); ++ const clipboardItems = await mainWindow.navigator.clipboard.read(); + const clipboardItem = clipboardItems[0]; + + const supportedImageTypes = ['image/png', 'image/jpeg', 'image/gif', 'image/tiff', 'image/bmp']; +diff --git a/src/vs/platform/dialogs/browser/dialog.ts b/src/vs/platform/dialogs/browser/dialog.ts +index ec0ab5aa54b..becd33e226d 100644 +--- a/src/vs/platform/dialogs/browser/dialog.ts ++++ b/src/vs/platform/dialogs/browser/dialog.ts +@@ -6,6 +6,7 @@ + import { EventHelper } from '../../../base/browser/dom.js'; + import { StandardKeyboardEvent } from '../../../base/browser/keyboardEvent.js'; + import { IDialogOptions } from '../../../base/browser/ui/dialog/dialog.js'; ++import { mainWindow } from '../../../base/browser/window.js'; + import { fromNow } from '../../../base/common/date.js'; + import { localize } from '../../../nls.js'; + import { IKeybindingService } from '../../keybinding/common/keybinding.js'; +@@ -50,7 +51,7 @@ export function createBrowserAboutDialogDetails(productService: IProductService) + productService.version || 'Unknown', + productService.commit || 'Unknown', + productService.date ? `${productService.date}${useAgo ? ' (' + fromNow(new Date(productService.date), true) + ')' : ''}` : 'Unknown', +- navigator.userAgent ++ mainWindow.navigator.userAgent + ); + }; + +diff --git a/src/vs/platform/remote/browser/browserSocketFactory.ts b/src/vs/platform/remote/browser/browserSocketFactory.ts +index cad70612060..0c9266f2b8e 100644 +--- a/src/vs/platform/remote/browser/browserSocketFactory.ts ++++ b/src/vs/platform/remote/browser/browserSocketFactory.ts +@@ -156,7 +156,7 @@ class BrowserWebSocket extends Disposable implements IWebSocket { + this._isClosed = true; + + if (pendingErrorEvent) { +- if (!navigator.onLine) { ++ if (!mainWindow.navigator.onLine) { + // The browser is offline => this is a temporary error which might resolve itself + sendErrorNow(new RemoteAuthorityResolverError('Browser is offline', RemoteAuthorityResolverErrorCode.TemporarilyNotAvailable, e)); + } else { diff --git a/src/vs/workbench/browser/window.ts b/src/vs/workbench/browser/window.ts index 63dfbb43d35..d18dd762ba8 100644 --- a/src/vs/workbench/browser/window.ts @@ -241,6 +478,19 @@ index eb0a9ffbc42..b6a71a21ce4 100644 try { const url = new URL(item.name); +diff --git a/src/vs/workbench/contrib/remote/browser/remoteIndicator.ts b/src/vs/workbench/contrib/remote/browser/remoteIndicator.ts +index 66108502b91..f90c7df5714 100644 +--- a/src/vs/workbench/contrib/remote/browser/remoteIndicator.ts ++++ b/src/vs/workbench/contrib/remote/browser/remoteIndicator.ts +@@ -300,7 +300,7 @@ export class RemoteStatusIndicator extends Disposable implements IWorkbenchContr + this._register(Event.any( + this._register(new DomEmitter(mainWindow, 'online')).event, + this._register(new DomEmitter(mainWindow, 'offline')).event +- )(() => this.setNetworkState(navigator.onLine ? 'online' : 'offline'))); ++ )(() => this.setNetworkState(mainWindow.navigator.onLine ? 'online' : 'offline'))); + } + + this._register(this.extensionService.onDidChangeExtensions(async (result) => { diff --git a/src/vs/workbench/services/extensions/browser/webWorkerExtensionHost.ts b/src/vs/workbench/services/extensions/browser/webWorkerExtensionHost.ts index c6fbb0f49ba..9ca075c4b19 100644 --- a/src/vs/workbench/services/extensions/browser/webWorkerExtensionHost.ts @@ -269,6 +519,32 @@ index c6fbb0f49ba..9ca075c4b19 100644 }; const protocol: IMessagePassingProtocol = { +diff --git a/src/vs/workbench/services/host/browser/browserHostService.ts b/src/vs/workbench/services/host/browser/browserHostService.ts +index 81419568733..cf225505060 100644 +--- a/src/vs/workbench/services/host/browser/browserHostService.ts ++++ b/src/vs/workbench/services/host/browser/browserHostService.ts +@@ -635,7 +635,7 @@ export class BrowserHostService extends Disposable implements IHostService { + let stream: MediaStream | undefined; + try { + // Create a stream from the screen source (capture screen without audio) +- stream = await navigator.mediaDevices.getDisplayMedia({ ++ stream = await mainWindow.navigator.mediaDevices.getDisplayMedia({ + audio: false, + video: true + }); +diff --git a/src/vs/workbench/services/keybinding/browser/keybindingService.ts b/src/vs/workbench/services/keybinding/browser/keybindingService.ts +index cc2e76c3994..6929b00e4bd 100644 +--- a/src/vs/workbench/services/keybinding/browser/keybindingService.ts ++++ b/src/vs/workbench/services/keybinding/browser/keybindingService.ts +@@ -245,7 +245,7 @@ export class WorkbenchKeybindingService extends AbstractKeybindingService { + return; + } + +- const keyboard: IKeyboard | null = (navigator).keyboard; ++ const keyboard: IKeyboard | null = (mainWindow.navigator).keyboard; + + if (BrowserFeatures.keyboard === KeyboardSupport.None) { + return; diff --git a/src/vs/workbench/services/lifecycle/browser/lifecycleService.ts b/src/vs/workbench/services/lifecycle/browser/lifecycleService.ts index 5bacc9fad6b..36f6d7776ed 100644 --- a/src/vs/workbench/services/lifecycle/browser/lifecycleService.ts @@ -282,3 +558,97 @@ index 5bacc9fad6b..36f6d7776ed 100644 if (timing?.type === 'reload') { // MDN: https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigationTiming/type#value startupKind = StartupKind.ReloadedWindow; +diff --git a/src/vs/workbench/services/localization/browser/localeService.ts b/src/vs/workbench/services/localization/browser/localeService.ts +index a107a2f8695..57c79e02676 100644 +--- a/src/vs/workbench/services/localization/browser/localeService.ts ++++ b/src/vs/workbench/services/localization/browser/localeService.ts +@@ -14,6 +14,7 @@ import { InstantiationType, registerSingleton } from '../../../../platform/insta + import { CancellationToken } from '../../../../base/common/cancellation.js'; + import { IExtensionGalleryService } from '../../../../platform/extensionManagement/common/extensionManagement.js'; + import { ILogService } from '../../../../platform/log/common/log.js'; ++import { mainWindow } from '../../../../base/browser/window.js'; + + const localeStorage = new class LocaleStorage { + +@@ -65,7 +66,7 @@ export abstract class AbstractLocaleService implements ILocaleService { + + async setLocale(languagePackItem: ILanguagePackItem, _skipDialog = false): Promise { + const locale = languagePackItem.id; +- if (locale === Language.value() || (!locale && Language.value() === navigator.language.toLowerCase())) { ++ if (locale === Language.value() || (!locale && Language.value() === mainWindow.navigator.language.toLowerCase())) { + return; + } + this.storeLocale(locale, languagePackItem.extensionId); +@@ -85,7 +86,7 @@ export abstract class AbstractLocaleService implements ILocaleService { + async clearLocalePreference(): Promise { + this.clearLocale(); + +- if (Language.value() === navigator.language.toLowerCase()) { ++ if (Language.value() === mainWindow.navigator.language.toLowerCase()) { + return; + } + +diff --git a/src/vs/workbench/services/request/browser/requestService.ts b/src/vs/workbench/services/request/browser/requestService.ts +index b7fd8daa969..9f2b2b7191b 100644 +--- a/src/vs/workbench/services/request/browser/requestService.ts ++++ b/src/vs/workbench/services/request/browser/requestService.ts +@@ -16,6 +16,7 @@ import { ILoggerService } from '../../../../platform/log/common/log.js'; + import { localize } from '../../../../nls.js'; + import { LogService } from '../../../../platform/log/common/logService.js'; + import { windowLogGroup } from '../../log/common/logConstants.js'; ++import { mainWindow } from '../../../../base/browser/window.js'; + + export class BrowserRequestService extends AbstractRequestService implements IRequestService { + +@@ -38,7 +39,7 @@ export class BrowserRequestService extends AbstractRequestService implements IRe + if (!options.proxyAuthorization) { + options.proxyAuthorization = this.configurationService.inspect('http.proxyAuthorization').userLocalValue; + } +- const context = await this.logAndRequest(options, () => request(options, token, () => navigator.onLine)); ++ const context = await this.logAndRequest(options, () => request(options, token, () => mainWindow.navigator.onLine)); + + const connection = this.remoteAgentService.getConnection(); + if (connection && context.res.statusCode === 405) { +diff --git a/src/vs/workbench/services/request/electron-browser/requestService.ts b/src/vs/workbench/services/request/electron-browser/requestService.ts +index 5f6960784ee..fb555497336 100644 +--- a/src/vs/workbench/services/request/electron-browser/requestService.ts ++++ b/src/vs/workbench/services/request/electron-browser/requestService.ts +@@ -14,6 +14,7 @@ import { ILoggerService } from '../../../../platform/log/common/log.js'; + import { localize } from '../../../../nls.js'; + import { windowLogGroup } from '../../log/common/logConstants.js'; + import { LogService } from '../../../../platform/log/common/logService.js'; ++import { mainWindow } from '../../../../base/browser/window.js'; + + export class NativeRequestService extends AbstractRequestService implements IRequestService { + +@@ -35,7 +36,7 @@ export class NativeRequestService extends AbstractRequestService implements IReq + if (!options.proxyAuthorization) { + options.proxyAuthorization = this.configurationService.inspect('http.proxyAuthorization').userLocalValue; + } +- return this.logAndRequest(options, () => request(options, token, () => navigator.onLine)); ++ return this.logAndRequest(options, () => request(options, token, () => mainWindow.navigator.onLine)); + } + + async resolveProxy(url: string): Promise { +diff --git a/src/vs/workbench/services/timer/browser/timerService.ts b/src/vs/workbench/services/timer/browser/timerService.ts +index dd80dce0eb4..ac4229906a2 100644 +--- a/src/vs/workbench/services/timer/browser/timerService.ts ++++ b/src/vs/workbench/services/timer/browser/timerService.ts +@@ -21,6 +21,7 @@ import { isWeb } from '../../../../base/common/platform.js'; + import { createBlobWorker } from '../../../../base/browser/webWorkerFactory.js'; + import { Registry } from '../../../../platform/registry/common/platform.js'; + import { ITerminalBackendRegistry, TerminalExtensions } from '../../../../platform/terminal/common/terminal.js'; ++import { mainWindow } from '../../../../base/browser/window.js'; + + /* __GDPR__FRAGMENT__ + "IMemoryInfo" : { +@@ -783,7 +784,7 @@ export class TimerService extends AbstractTimerService { + protected async _extendStartupInfo(info: Writeable): Promise { + info.isVMLikelyhood = 0; + info.isARM64Emulated = false; +- info.platform = navigator.userAgent; +- info.release = navigator.appVersion; ++ info.platform = mainWindow.navigator.userAgent; ++ info.release = mainWindow.navigator.appVersion; + } + } diff --git a/vscode-patches/0069-feat-mark-elements-created-outside-of-the-VSCode-con.patch b/vscode-patches/0069-feat-mark-elements-created-outside-of-the-VSCode-con.patch index bdf80bd5..1ac47f0f 100644 --- a/vscode-patches/0069-feat-mark-elements-created-outside-of-the-VSCode-con.patch +++ b/vscode-patches/0069-feat-mark-elements-created-outside-of-the-VSCode-con.patch @@ -9,10 +9,10 @@ Subject: [PATCH] feat: mark elements created outside of the VSCode container 2 files changed, 2 insertions(+) diff --git a/src/vs/base/browser/dom.ts b/src/vs/base/browser/dom.ts -index 100ddac2639..0a34cb15839 100644 +index f38d1d306c3..ae9584b1630 100644 --- a/src/vs/base/browser/dom.ts +++ b/src/vs/base/browser/dom.ts -@@ -1065,6 +1065,7 @@ export function createLinkElement(container: HTMLElement = mainWindow.document.h +@@ -1067,6 +1067,7 @@ export function createLinkElement(container: HTMLElement = mainWindow.document.h function createHeadElement(tagName: K, container: HTMLElement = mainWindow.document.head): HTMLElementTagNameMap[K] { const element = document.createElement(tagName); diff --git a/vscode-patches/0070-feat-centralize-element-creation-to-be-able-to-creat.patch b/vscode-patches/0070-feat-centralize-element-creation-to-be-able-to-creat.patch index 07fd620a..676305fe 100644 --- a/vscode-patches/0070-feat-centralize-element-creation-to-be-able-to-creat.patch +++ b/vscode-patches/0070-feat-centralize-element-creation-to-be-able-to-creat.patch @@ -5,52 +5,52 @@ Subject: [PATCH] feat: centralize element creation, to be able to create them on the proper document --- - src/vs/base/browser/dom.ts | 48 ++++++++++--- - src/vs/base/browser/domSanitize.ts | 19 ++--- + src/vs/base/browser/dom.ts | 48 +++++++++++++++---- + src/vs/base/browser/domSanitize.ts | 19 ++++---- src/vs/base/browser/domStylesheets.ts | 4 +- - src/vs/base/browser/formattedTextRenderer.ts | 16 ++--- + src/vs/base/browser/formattedTextRenderer.ts | 16 +++---- src/vs/base/browser/markdownRenderer.ts | 2 +- src/vs/base/browser/pixelRatio.ts | 4 +- - .../browser/ui/actionbar/actionViewItems.ts | 6 +- - src/vs/base/browser/ui/actionbar/actionbar.ts | 7 +- - src/vs/base/browser/ui/aria/aria.ts | 6 +- + .../browser/ui/actionbar/actionViewItems.ts | 6 +-- + src/vs/base/browser/ui/actionbar/actionbar.ts | 7 +-- + src/vs/base/browser/ui/aria/aria.ts | 6 +-- .../ui/breadcrumbs/breadcrumbsWidget.ts | 4 +- - src/vs/base/browser/ui/button/button.ts | 24 +++---- + src/vs/base/browser/ui/button/button.ts | 24 +++++----- .../browser/ui/contextview/contextview.ts | 2 +- src/vs/base/browser/ui/findinput/findInput.ts | 4 +- .../base/browser/ui/findinput/replaceInput.ts | 4 +- src/vs/base/browser/ui/hover/hoverWidget.ts | 4 +- - src/vs/base/browser/ui/list/listView.ts | 6 +- + src/vs/base/browser/ui/list/listView.ts | 6 +-- src/vs/base/browser/ui/menu/menu.ts | 4 +- - .../browser/ui/progressbar/progressbar.ts | 6 +- + .../browser/ui/progressbar/progressbar.ts | 6 +-- src/vs/base/browser/ui/resizable/resizable.ts | 4 +- - .../browser/ui/scrollbar/abstractScrollbar.ts | 6 +- - .../browser/ui/scrollbar/scrollableElement.ts | 8 +-- - .../browser/ui/scrollbar/scrollbarArrow.ts | 6 +- - .../browser/ui/selectBox/selectBoxCustom.ts | 6 +- + .../browser/ui/scrollbar/abstractScrollbar.ts | 6 +-- + .../browser/ui/scrollbar/scrollableElement.ts | 8 ++-- + .../browser/ui/scrollbar/scrollbarArrow.ts | 6 +-- + .../browser/ui/selectBox/selectBoxCustom.ts | 6 +-- .../browser/ui/selectBox/selectBoxNative.ts | 4 +- src/vs/base/browser/ui/splitview/splitview.ts | 4 +- src/vs/base/browser/ui/toggle/toggle.ts | 4 +- src/vs/base/browser/ui/toolbar/toolbar.ts | 3 +- src/vs/base/browser/ui/tree/abstractTree.ts | 4 +- src/vs/base/test/browser/ui/grid/util.ts | 3 +- - .../electron-browser/workbench/workbench.ts | 34 ++++----- - .../editor/browser/config/charWidthReader.ts | 13 ++-- - .../editContext/native/debugEditContext.ts | 13 ++-- - .../editContext/native/nativeEditContext.ts | 6 +- + .../electron-browser/workbench/workbench.ts | 34 ++++++------- + .../editor/browser/config/charWidthReader.ts | 13 ++--- + .../editContext/native/debugEditContext.ts | 13 ++--- + .../editContext/native/nativeEditContext.ts | 6 +-- .../native/screenReaderContentRich.ts | 4 +- .../textArea/textAreaEditContext.ts | 5 +- .../editor/browser/controller/mouseTarget.ts | 2 +- src/vs/editor/browser/gpu/viewGpuContext.ts | 4 +- src/vs/editor/browser/observableCodeEditor.ts | 3 +- - src/vs/editor/browser/view.ts | 6 +- + src/vs/editor/browser/view.ts | 6 +-- .../browser/view/domLineBreaksComputer.ts | 3 +- src/vs/editor/browser/view/viewLayer.ts | 5 +- .../blockDecorations/blockDecorations.ts | 5 +- .../contentWidgets/contentWidgets.ts | 4 +- .../viewParts/glyphMargin/glyphMargin.ts | 5 +- .../editor/browser/viewParts/margin/margin.ts | 5 +- - .../browser/viewParts/minimap/minimap.ts | 14 ++-- + .../browser/viewParts/minimap/minimap.ts | 14 +++--- .../minimap/minimapCharRendererFactory.ts | 3 +- .../overlayWidgets/overlayWidgets.ts | 4 +- .../overviewRuler/decorationsOverviewRuler.ts | 3 +- @@ -61,14 +61,14 @@ Subject: [PATCH] feat: centralize element creation, to be able to create them .../viewParts/viewCursors/viewCursors.ts | 4 +- .../browser/viewParts/viewLines/viewLines.ts | 3 +- .../browser/viewParts/viewZones/viewZones.ts | 5 +- - .../components/accessibleDiffViewer.ts | 30 ++++---- - .../diffEditorViewZones.ts | 18 ++--- + .../components/accessibleDiffViewer.ts | 30 ++++++------ + .../diffEditorViewZones.ts | 18 +++---- .../inlineDiffDeletedCodeMargin.ts | 4 +- - .../features/movedBlocksLinesFeature.ts | 12 ++-- + .../features/movedBlocksLinesFeature.ts | 12 ++--- .../features/overviewRulerFeature.ts | 4 +- .../editor/browser/widget/diffEditor/utils.ts | 4 +- .../widget/diffEditor/utils/editorGutter.ts | 4 +- - .../editorMarkdownCodeBlockRenderer.ts | 6 +- + .../editorMarkdownCodeBlockRenderer.ts | 6 +-- .../codelens/browser/codelensWidget.ts | 4 +- .../colorPickerCloseButton.ts | 4 +- .../colorPickerParts/colorPickerHeader.ts | 2 +- @@ -77,8 +77,8 @@ Subject: [PATCH] feat: centralize element creation, to be able to create them .../colorPickerParts/colorPickerStrip.ts | 2 +- .../standaloneColorPickerWidget.ts | 4 +- .../contrib/find/browser/findOptionsWidget.ts | 2 +- - .../editor/contrib/find/browser/findWidget.ts | 18 ++--- - .../gotoError/browser/gotoErrorWidget.ts | 24 +++---- + .../editor/contrib/find/browser/findWidget.ts | 18 +++---- + .../gotoError/browser/gotoErrorWidget.ts | 24 +++++----- .../gotoSymbol/browser/peek/referencesTree.ts | 2 +- .../hover/browser/contentHoverRendered.ts | 2 +- .../contrib/hover/browser/glyphHoverWidget.ts | 2 +- @@ -88,92 +88,92 @@ Subject: [PATCH] feat: centralize element creation, to be able to create them .../inlineEditsViews/inlineEditsCustomView.ts | 4 +- .../inlineEditsLineReplacementView.ts | 4 +- .../inlineEditsWordReplacementView.ts | 4 +- - .../message/browser/messageController.ts | 8 +-- - .../browser/parameterHintsWidget.ts | 6 +- - .../contrib/rename/browser/renameWidget.ts | 18 ++--- - .../browser/stickyScrollWidget.ts | 16 ++--- - .../contrib/zoneWidget/browser/zoneWidget.ts | 6 +- + .../message/browser/messageController.ts | 8 ++-- + .../browser/parameterHintsWidget.ts | 6 +-- + .../contrib/rename/browser/renameWidget.ts | 18 +++---- + .../browser/stickyScrollWidget.ts | 16 +++---- + .../contrib/zoneWidget/browser/zoneWidget.ts | 6 +-- .../iPadShowKeyboard/iPadShowKeyboard.ts | 2 +- .../browser/inspectTokens/inspectTokens.ts | 4 +- .../quickInput/standaloneQuickInputService.ts | 3 +- .../test/browser/controller/imeRecorder.ts | 3 +- - .../test/browser/controller/imeTester.ts | 22 +++--- - .../actionWidget/browser/actionList.ts | 12 ++-- - .../actionWidget/browser/actionWidget.ts | 6 +- + .../test/browser/controller/imeTester.ts | 22 ++++----- + .../actionWidget/browser/actionList.ts | 12 ++--- + .../actionWidget/browser/actionWidget.ts | 6 +-- .../imageResize/browser/imageResizeService.ts | 3 +- .../markdown/browser/markdownRenderer.ts | 3 +- .../api/browser/mainThreadCodeInsets.ts | 4 +- .../browser/actions/developerActions.ts | 4 +- - src/vs/workbench/browser/layout.ts | 72 +++++++++---------- + src/vs/workbench/browser/layout.ts | 4 +- .../parts/editor/breadcrumbsControl.ts | 2 +- - .../browser/parts/editor/breadcrumbsPicker.ts | 7 +- + .../browser/parts/editor/breadcrumbsPicker.ts | 7 +-- .../notifications/notificationsViewer.ts | 4 +- - .../parts/titlebar/commandCenterControl.ts | 8 +-- + .../parts/titlebar/commandCenterControl.ts | 8 ++-- .../workbench/browser/parts/views/treeView.ts | 4 +- src/vs/workbench/browser/workbench.ts | 4 +- - .../accessibility/browser/accessibleView.ts | 10 +-- - .../bulkEdit/browser/preview/bulkEditPane.ts | 9 +-- - .../bulkEdit/browser/preview/bulkEditTree.ts | 10 +-- - .../browser/callHierarchyPeek.ts | 10 +-- + .../accessibility/browser/accessibleView.ts | 10 ++-- + .../bulkEdit/browser/preview/bulkEditPane.ts | 9 ++-- + .../bulkEdit/browser/preview/bulkEditTree.ts | 10 ++-- + .../browser/callHierarchyPeek.ts | 10 ++-- .../browser/callHierarchyTree.ts | 3 +- .../chatAgentCommandContentPart.ts | 5 +- .../chatConfirmationWidget.ts | 2 +- .../chatToolInputOutputContentPart.ts | 2 +- - .../chatTerminalToolProgressPart.ts | 8 +-- + .../chatTerminalToolProgressPart.ts | 8 ++-- .../chatToolConfirmationSubPart.ts | 2 +- .../chatToolProgressPart.ts | 2 +- .../contrib/chat/browser/chatDragAndDrop.ts | 4 +- - .../chatEditingCodeEditorIntegration.ts | 8 +-- - .../chatEditing/chatEditingEditorOverlay.ts | 10 +-- + .../chatEditingCodeEditorIntegration.ts | 8 ++-- + .../chatEditing/chatEditingEditorOverlay.ts | 10 ++-- .../notebook/overlayToolbarDecorator.ts | 5 +- - .../chatEditing/simpleBrowserEditorOverlay.ts | 14 ++-- + .../chatEditing/simpleBrowserEditorOverlay.ts | 14 +++--- .../contrib/chat/browser/chatInputPart.ts | 4 +- .../contrib/chat/browser/chatWidget.ts | 2 +- .../contrib/chat/browser/imageUtils.ts | 3 +- .../browser/dictation/editorDictation.ts | 4 +- - .../browser/find/simpleFindWidget.ts | 8 +-- + .../browser/find/simpleFindWidget.ts | 8 ++-- .../inspectEditorTokens.ts | 4 +- .../contrib/comments/browser/commentNode.ts | 2 +- .../comments/browser/commentsTreeViewer.ts | 4 +- .../debug/browser/debugANSIHandling.ts | 3 +- - .../contrib/debug/browser/linkDetector.ts | 20 +++--- + .../contrib/debug/browser/linkDetector.ts | 20 ++++---- .../browser/inlayHintsAccessibilty.ts | 4 +- .../browser/inlineChatStrategies.ts | 4 +- - .../issue/browser/baseIssueReporterService.ts | 18 ++--- + .../issue/browser/baseIssueReporterService.ts | 18 +++---- .../contrib/issue/browser/issueFormService.ts | 3 +- - .../languageStatus/browser/languageStatus.ts | 12 ++-- + .../languageStatus/browser/languageStatus.ts | 12 ++--- .../markdown/browser/markedKatexSupport.ts | 4 +- .../mergeEditor/browser/view/editorGutter.ts | 4 +- .../browser/view/fixedZoneWidget.ts | 4 +- - .../contrib/find/notebookFindReplaceWidget.ts | 8 +-- + .../contrib/find/notebookFindReplaceWidget.ts | 8 ++-- .../contrib/find/notebookFindWidget.ts | 2 +- - .../contrib/outline/notebookOutline.ts | 6 +- - .../browser/contrib/troubleshoot/layout.ts | 8 +-- + .../contrib/outline/notebookOutline.ts | 6 +-- + .../browser/contrib/troubleshoot/layout.ts | 8 ++-- .../browser/diff/diffElementOutputs.ts | 2 +- .../inlineDiff/notebookCellDiffDecorator.ts | 3 +- - .../notebookDeletedCellDecorator.ts | 6 +- + .../notebookDeletedCellDecorator.ts | 6 +-- .../browser/diff/notebookDiffEditor.ts | 4 +- .../browser/diff/notebookDiffOverviewRuler.ts | 4 +- - .../notebook/browser/notebookEditorWidget.ts | 12 ++-- + .../notebook/browser/notebookEditorWidget.ts | 12 ++--- .../browser/view/cellParts/cellActionView.ts | 4 +- .../view/cellParts/cellDragRenderer.ts | 2 +- .../view/cellParts/codeCellRunToolbar.ts | 3 +- .../view/renderers/backLayerWebView.ts | 3 +- .../browser/viewParts/notebookCellOverlays.ts | 3 +- - .../viewParts/notebookEditorStickyScroll.ts | 6 +- + .../viewParts/notebookEditorStickyScroll.ts | 6 +-- .../viewParts/notebookEditorToolbar.ts | 4 +- .../browser/viewParts/notebookKernelView.ts | 3 +- .../viewParts/notebookOverviewRuler.ts | 4 +- .../browser/viewParts/notebookViewZones.ts | 5 +- - .../preferences/browser/keybindingWidgets.ts | 6 +- + .../preferences/browser/keybindingWidgets.ts | 6 +-- .../contrib/remote/browser/remote.ts | 2 +- - .../contrib/scm/browser/scmHistory.ts | 10 +-- + .../contrib/scm/browser/scmHistory.ts | 10 ++-- src/vs/workbench/contrib/scm/browser/util.ts | 4 +- .../search/browser/patternInputWidget.ts | 4 +- .../contrib/search/browser/searchMessage.ts | 2 +- .../browser/terminalConfigurationService.ts | 3 +- - .../contrib/terminal/browser/terminalGroup.ts | 6 +- - .../terminal/browser/terminalInstance.ts | 6 +- + .../contrib/terminal/browser/terminalGroup.ts | 6 +-- + .../terminal/browser/terminalInstance.ts | 6 +-- .../terminal/browser/terminalTabbedView.ts | 2 +- .../terminal/browser/widgets/widgetManager.ts | 3 +- .../shellIntegrationAddon.integrationTest.ts | 4 +- @@ -181,27 +181,27 @@ Subject: [PATCH] feat: centralize element creation, to be able to create them .../terminal.developer.contribution.ts | 3 +- .../browser/codeCoverageDecorations.ts | 2 +- .../testResultsView/testResultsViewContent.ts | 2 +- - .../testing/browser/testingDecorations.ts | 6 +- + .../testing/browser/testingDecorations.ts | 6 +-- .../testing/browser/testingExplorerView.ts | 2 +- .../testing/test/browser/testObjectTree.ts | 3 +- .../contrib/timeline/browser/timelinePane.ts | 2 +- - .../browser/typeHierarchyPeek.ts | 10 +-- + .../browser/typeHierarchyPeek.ts | 10 ++-- .../browser/typeHierarchyTree.ts | 3 +- .../contrib/webview/browser/overlayWebview.ts | 4 +- - .../contrib/webview/browser/webviewElement.ts | 6 +- + .../contrib/webview/browser/webviewElement.ts | 6 +-- .../webviewPanel/browser/webviewEditor.ts | 2 +- - .../browser/walkThroughPart.ts | 10 +-- - .../workspace/browser/workspaceTrustEditor.ts | 6 +- + .../browser/walkThroughPart.ts | 10 ++-- + .../workspace/browser/workspaceTrustEditor.ts | 6 +-- .../browser/webWorkerExtensionHost.ts | 2 +- - .../host/browser/browserHostService.ts | 6 +- + .../host/browser/browserHostService.ts | 6 +-- .../test/browser/workbenchTestServices.ts | 4 +- - 190 files changed, 648 insertions(+), 570 deletions(-) + 190 files changed, 614 insertions(+), 536 deletions(-) diff --git a/src/vs/base/browser/dom.ts b/src/vs/base/browser/dom.ts -index 0a34cb15839..fa02fea7607 100644 +index ae9584b1630..f70bce1d0d0 100644 --- a/src/vs/base/browser/dom.ts +++ b/src/vs/base/browser/dom.ts -@@ -1063,13 +1063,43 @@ export function createLinkElement(container: HTMLElement = mainWindow.document.h +@@ -1065,13 +1065,43 @@ export function createLinkElement(container: HTMLElement = mainWindow.document.h return createHeadElement('link', container); } @@ -246,7 +246,7 @@ index 0a34cb15839..fa02fea7607 100644 export function isHTMLElement(e: unknown): e is HTMLElement { return e instanceof mainWindow.HTMLElement || e instanceof getWindow(e as Node).HTMLElement; } -@@ -1356,9 +1386,9 @@ function _$(namespace: Namespace, description: string, attrs? +@@ -1358,9 +1388,9 @@ function _$(namespace: Namespace, description: string, attrs? let result: T; if (namespace !== Namespace.HTML) { @@ -258,7 +258,7 @@ index 0a34cb15839..fa02fea7607 100644 } if (match[3]) { -@@ -1409,7 +1439,7 @@ export function join(nodes: Node[], separator: Node | string): Node[] { +@@ -1411,7 +1441,7 @@ export function join(nodes: Node[], separator: Node | string): Node[] { if (separator instanceof Node) { result.push(separator.cloneNode()); } else { @@ -267,7 +267,7 @@ index 0a34cb15839..fa02fea7607 100644 } } -@@ -1611,7 +1641,7 @@ export function triggerDownload(dataOrUri: Uint8Array | URI, name: string): void +@@ -1613,7 +1643,7 @@ export function triggerDownload(dataOrUri: Uint8Array | URI, name: string): void // points to the file to download. // See also https://developers.google.com/web/updates/2011/08/Downloading-resources-in-HTML5-a-download const activeWindow = getActiveWindow(); @@ -276,7 +276,7 @@ index 0a34cb15839..fa02fea7607 100644 activeWindow.document.body.appendChild(anchor); anchor.download = name; anchor.href = url; -@@ -1628,7 +1658,7 @@ export function triggerUpload(): Promise { +@@ -1630,7 +1660,7 @@ export function triggerUpload(): Promise { // input element of type `file` and click it // to gather the selected files const activeWindow = getActiveWindow(); @@ -285,7 +285,7 @@ index 0a34cb15839..fa02fea7607 100644 activeWindow.document.body.appendChild(input); input.type = 'file'; input.multiple = true; -@@ -2077,7 +2107,7 @@ export function h(tag: string, ...args: [] | [attributes: { $: string } & Partia +@@ -2079,7 +2109,7 @@ export function h(tag: string, ...args: [] | [attributes: { $: string } & Partia } const tagName = match.groups['tag'] || 'div'; @@ -294,7 +294,7 @@ index 0a34cb15839..fa02fea7607 100644 if (match.groups['id']) { el.id = match.groups['id']; -@@ -2181,7 +2211,7 @@ export function svgElem(tag: string, ...args: [] | [attributes: { $: string } & +@@ -2183,7 +2213,7 @@ export function svgElem(tag: string, ...args: [] | [attributes: { $: string } & const tagName = match.groups['tag'] || 'div'; // eslint-disable-next-line local/code-no-any-casts @@ -303,7 +303,7 @@ index 0a34cb15839..fa02fea7607 100644 if (match.groups['id']) { el.id = match.groups['id']; -@@ -2447,7 +2477,7 @@ export abstract class ObserverNode, children: ChildNode ) { @@ -3369,96 +3369,18 @@ index 93d0b4cc089..fd0751d3ebf 100644 activeDocument.body.appendChild(hoverFeedback); disposables.add(toDisposable(() => hoverFeedback.remove())); diff --git a/src/vs/workbench/browser/layout.ts b/src/vs/workbench/browser/layout.ts -index 99aa6df59fa..7bd4c09ebf7 100644 +index 990f04d8acd..7260c7a7f63 100644 --- a/src/vs/workbench/browser/layout.ts +++ b/src/vs/workbench/browser/layout.ts -@@ -3,51 +3,51 @@ - * Licensed under the MIT License. See License.txt in the project root for license information. +@@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ -+import { isFullscreen, isWCOEnabled, onDidChangeFullscreen } from '../../base/browser/browser.js'; -+import { addDisposableListener, computeScreenAwareSize, createElement, Dimension, EventType, getActiveDocument, getActiveElement, getActiveWindow, getClientArea, getWindow, getWindowId, getWindows, IDimension, isActiveDocument, isAncestorUsingFlowTo, size, getFullscreenElement } from '../../base/browser/dom.js'; -+import { setContainerElement } from '../../base/browser/domStylesheets.js'; -+import { Direction, ISerializableView, ISerializedGrid, ISerializedLeafNode, ISerializedNode, IViewSize, Orientation, SerializableGrid, Sizing } from '../../base/browser/ui/grid/grid.js'; -+import { CodeWindow, mainWindow } from '../../base/browser/window.js'; -+import { coalesce } from '../../base/common/arrays.js'; -+import { DeferredPromise, Promises } from '../../base/common/async.js'; -+import { Emitter, Event } from '../../base/common/event.js'; - import { Disposable, DisposableMap, DisposableStore, IDisposable, toDisposable } from '../../base/common/lifecycle.js'; --import { Event, Emitter } from '../../base/common/event.js'; --import { EventType, addDisposableListener, getClientArea, size, IDimension, isAncestorUsingFlowTo, computeScreenAwareSize, getActiveDocument, getWindows, getActiveWindow, isActiveDocument, getWindow, getWindowId, getActiveElement, Dimension, getFullscreenElement } from '../../base/browser/dom.js'; --import { onDidChangeFullscreen, isFullscreen, isWCOEnabled } from '../../base/browser/browser.js'; --import { isWindows, isLinux, isMacintosh, isWeb, isIOS } from '../../base/common/platform.js'; --import { EditorInputCapabilities, GroupIdentifier, isResourceEditorInput, IUntypedEditorInput, pathsToEditors } from '../common/editor.js'; --import { SidebarPart } from './parts/sidebar/sidebarPart.js'; --import { PanelPart } from './parts/panel/panelPart.js'; --import { Position, Parts, PartOpensMaximizedOptions, IWorkbenchLayoutService, positionFromString, positionToString, partOpensMaximizedFromString, PanelAlignment, ActivityBarPosition, LayoutSettings, MULTI_WINDOW_PARTS, SINGLE_WINDOW_PARTS, ZenModeSettings, EditorTabsMode, EditorActionsLocation, shouldShowCustomTitleBar, isHorizontal, isMultiWindowPart } from '../services/layout/browser/layoutService.js'; --import { isTemporaryWorkspace, IWorkspaceContextService, WorkbenchState } from '../../platform/workspace/common/workspace.js'; --import { IStorageService, StorageScope, StorageTarget } from '../../platform/storage/common/storage.js'; -+import { mark } from '../../base/common/performance.js'; -+import { isIOS, isLinux, isMacintosh, isWeb, isWindows } from '../../base/common/platform.js'; -+import { assertReturnsDefined } from '../../base/common/types.js'; -+import { URI } from '../../base/common/uri.js'; -+import { isCodeEditor } from '../../editor/browser/editorBrowser.js'; -+import { LineNumbersType } from '../../editor/common/config/editorOptions.js'; - import { IConfigurationChangeEvent, IConfigurationService, isConfigured } from '../../platform/configuration/common/configuration.js'; --import { ITitleService } from '../services/title/browser/titleService.js'; --import { ServicesAccessor } from '../../platform/instantiation/common/instantiation.js'; --import { StartupKind, ILifecycleService } from '../services/lifecycle/common/lifecycle.js'; --import { getMenuBarVisibility, IPath, hasNativeTitlebar, hasCustomTitlebar, TitleBarSetting, CustomTitleBarVisibility, useWindowControlsOverlay, DEFAULT_EMPTY_WINDOW_SIZE, DEFAULT_WORKSPACE_WINDOW_SIZE, hasNativeMenu, MenuSettings } from '../../platform/window/common/window.js'; --import { IHostService } from '../services/host/browser/host.js'; --import { IBrowserWorkbenchEnvironmentService } from '../services/environment/browser/environmentService.js'; --import { IEditorService } from '../services/editor/common/editorService.js'; --import { EditorGroupLayout, GroupOrientation, GroupsOrder, IEditorGroupsService } from '../services/editor/common/editorGroupsService.js'; --import { SerializableGrid, ISerializableView, ISerializedGrid, Orientation, ISerializedNode, ISerializedLeafNode, Direction, IViewSize, Sizing } from '../../base/browser/ui/grid/grid.js'; --import { Part } from './part.js'; --import { IStatusbarService } from '../services/statusbar/browser/statusbar.js'; - import { IFileService } from '../../platform/files/common/files.js'; --import { isCodeEditor } from '../../editor/browser/editorBrowser.js'; --import { coalesce } from '../../base/common/arrays.js'; --import { assertReturnsDefined } from '../../base/common/types.js'; -+import { ServicesAccessor } from '../../platform/instantiation/common/instantiation.js'; -+import { ILogService } from '../../platform/log/common/log.js'; - import { INotificationService, NotificationsFilter } from '../../platform/notification/common/notification.js'; -+import { IStorageService, StorageScope, StorageTarget } from '../../platform/storage/common/storage.js'; -+import { ITelemetryService } from '../../platform/telemetry/common/telemetry.js'; - import { IThemeService } from '../../platform/theme/common/themeService.js'; -+import { CustomTitleBarVisibility, DEFAULT_EMPTY_WINDOW_SIZE, DEFAULT_WORKSPACE_WINDOW_SIZE, getMenuBarVisibility, hasCustomTitlebar, hasNativeMenu, hasNativeTitlebar, IPath, MenuSettings, TitleBarSetting, useWindowControlsOverlay } from '../../platform/window/common/window.js'; -+import { isTemporaryWorkspace, IWorkspaceContextService, WorkbenchState } from '../../platform/workspace/common/workspace.js'; -+import { EditorInputCapabilities, GroupIdentifier, isResourceEditorInput, IUntypedEditorInput, pathsToEditors } from '../common/editor.js'; -+import { DiffEditorInput } from '../common/editor/diffEditorInput.js'; - import { WINDOW_ACTIVE_BORDER, WINDOW_INACTIVE_BORDER } from '../common/theme.js'; --import { LineNumbersType } from '../../editor/common/config/editorOptions.js'; --import { URI } from '../../base/common/uri.js'; - import { IViewDescriptorService, ViewContainerLocation } from '../common/views.js'; --import { DiffEditorInput } from '../common/editor/diffEditorInput.js'; --import { mark } from '../../base/common/performance.js'; --import { IExtensionService } from '../services/extensions/common/extensions.js'; --import { ILogService } from '../../platform/log/common/log.js'; --import { DeferredPromise, Promises } from '../../base/common/async.js'; -+import { IAuxiliaryWindowService } from '../services/auxiliaryWindow/browser/auxiliaryWindowService.js'; - import { IBannerService } from '../services/banner/browser/bannerService.js'; -+import { EditorGroupLayout, GroupOrientation, GroupsOrder, IEditorGroupsService } from '../services/editor/common/editorGroupsService.js'; -+import { IEditorService } from '../services/editor/common/editorService.js'; -+import { IBrowserWorkbenchEnvironmentService } from '../services/environment/browser/environmentService.js'; -+import { IExtensionService } from '../services/extensions/common/extensions.js'; -+import { IHostService } from '../services/host/browser/host.js'; -+import { ActivityBarPosition, EditorActionsLocation, EditorTabsMode, isHorizontal, isMultiWindowPart, IWorkbenchLayoutService, LayoutSettings, MULTI_WINDOW_PARTS, PanelAlignment, partOpensMaximizedFromString, PartOpensMaximizedOptions, Parts, Position, positionFromString, positionToString, shouldShowCustomTitleBar, SINGLE_WINDOW_PARTS, ZenModeSettings } from '../services/layout/browser/layoutService.js'; -+import { ILifecycleService, StartupKind } from '../services/lifecycle/common/lifecycle.js'; - import { IPaneCompositePartService } from '../services/panecomposite/browser/panecomposite.js'; -+import { IStatusbarService } from '../services/statusbar/browser/statusbar.js'; -+import { ITitleService } from '../services/title/browser/titleService.js'; -+import { Part } from './part.js'; - import { AuxiliaryBarPart } from './parts/auxiliarybar/auxiliaryBarPart.js'; --import { ITelemetryService } from '../../platform/telemetry/common/telemetry.js'; --import { IAuxiliaryWindowService } from '../services/auxiliaryWindow/browser/auxiliaryWindowService.js'; --import { CodeWindow, mainWindow } from '../../base/browser/window.js'; --import { setContainerElement } from '../../base/browser/domStylesheets.js'; -+import { PanelPart } from './parts/panel/panelPart.js'; -+import { SidebarPart } from './parts/sidebar/sidebarPart.js'; - - //#region Layout Implementation - + import { isFullscreen, isWCOEnabled, onDidChangeFullscreen } from '../../base/browser/browser.js'; +-import { addDisposableListener, computeScreenAwareSize, Dimension, EventType, getActiveDocument, getActiveElement, getActiveWindow, getClientArea, getFullscreenElement, getWindow, getWindowId, getWindows, IDimension, isActiveDocument, isAncestorUsingFlowTo, size } from '../../base/browser/dom.js'; ++import { addDisposableListener, computeScreenAwareSize, createElement, Dimension, EventType, getActiveDocument, getActiveElement, getActiveWindow, getClientArea, getFullscreenElement, getWindow, getWindowId, getWindows, IDimension, isActiveDocument, isAncestorUsingFlowTo, size } from '../../base/browser/dom.js'; + import { setContainerElement } from '../../base/browser/domStylesheets.js'; + import { Direction, ISerializableView, ISerializedGrid, ISerializedLeafNode, ISerializedNode, IViewSize, Orientation, SerializableGrid, Sizing } from '../../base/browser/ui/grid/grid.js'; + import { CodeWindow, mainWindow } from '../../base/browser/window.js'; @@ -185,7 +185,7 @@ export abstract class Layout extends Disposable implements IWorkbenchLayoutServi //#region Properties @@ -5829,7 +5751,7 @@ index 9ca075c4b19..b347a592987 100644 iframe.setAttribute('sandbox', 'allow-scripts allow-same-origin'); iframe.setAttribute('allow', 'usb; serial; hid; cross-origin-isolated;'); diff --git a/src/vs/workbench/services/host/browser/browserHostService.ts b/src/vs/workbench/services/host/browser/browserHostService.ts -index 81419568733..d111f985169 100644 +index cf225505060..426c2de798f 100644 --- a/src/vs/workbench/services/host/browser/browserHostService.ts +++ b/src/vs/workbench/services/host/browser/browserHostService.ts @@ -15,7 +15,7 @@ import { whenEditorClosed } from '../../../browser/editor.js'; diff --git a/vscode-patches/0078-feat-add-customEditorRestore.patch b/vscode-patches/0078-feat-add-customEditorRestore.patch index df79a28d..bca22b1a 100644 --- a/vscode-patches/0078-feat-add-customEditorRestore.patch +++ b/vscode-patches/0078-feat-add-customEditorRestore.patch @@ -4,29 +4,90 @@ Date: Tue, 23 Sep 2025 11:13:34 +0200 Subject: [PATCH] feat: add customEditorRestore --- - src/vs/workbench/browser/layout.ts | 9 ++++++--- - src/vs/workbench/browser/workbench.ts | 12 +++++++----- - 2 files changed, 13 insertions(+), 8 deletions(-) + src/vs/workbench/browser/layout.ts | 61 ++++++++++++++------------- + src/vs/workbench/browser/workbench.ts | 12 +++--- + 2 files changed, 39 insertions(+), 34 deletions(-) diff --git a/src/vs/workbench/browser/layout.ts b/src/vs/workbench/browser/layout.ts -index 7bd4c09ebf7..5bd0bad173a 100644 +index 7260c7a7f63..f7379482bd6 100644 --- a/src/vs/workbench/browser/layout.ts +++ b/src/vs/workbench/browser/layout.ts -@@ -20,7 +20,7 @@ import { isCodeEditor } from '../../editor/browser/editorBrowser.js'; - import { LineNumbersType } from '../../editor/common/config/editorOptions.js'; +@@ -12,42 +12,42 @@ import { coalesce } from '../../base/common/arrays.js'; + import { DeferredPromise, Promises } from '../../base/common/async.js'; + import { Emitter, Event } from '../../base/common/event.js'; + import { Disposable, DisposableMap, DisposableStore, IDisposable, toDisposable } from '../../base/common/lifecycle.js'; +-import { isWindows, isLinux, isMacintosh, isWeb, isIOS } from '../../base/common/platform.js'; +-import { EditorInputCapabilities, GroupIdentifier, isResourceEditorInput, IUntypedEditorInput, pathsToEditors } from '../common/editor.js'; +-import { SidebarPart } from './parts/sidebar/sidebarPart.js'; +-import { PanelPart } from './parts/panel/panelPart.js'; +-import { Position, Parts, PartOpensMaximizedOptions, IWorkbenchLayoutService, positionFromString, positionToString, partOpensMaximizedFromString, PanelAlignment, ActivityBarPosition, LayoutSettings, MULTI_WINDOW_PARTS, SINGLE_WINDOW_PARTS, ZenModeSettings, EditorTabsMode, EditorActionsLocation, shouldShowCustomTitleBar, isHorizontal, isMultiWindowPart } from '../services/layout/browser/layoutService.js'; +-import { isTemporaryWorkspace, IWorkspaceContextService, WorkbenchState } from '../../platform/workspace/common/workspace.js'; +-import { IStorageService, StorageScope, StorageTarget } from '../../platform/storage/common/storage.js'; ++import { mark } from '../../base/common/performance.js'; ++import { isIOS, isLinux, isMacintosh, isWeb, isWindows } from '../../base/common/platform.js'; ++import { assertReturnsDefined } from '../../base/common/types.js'; ++import { URI } from '../../base/common/uri.js'; ++import { isCodeEditor } from '../../editor/browser/editorBrowser.js'; ++import { LineNumbersType } from '../../editor/common/config/editorOptions.js'; import { IConfigurationChangeEvent, IConfigurationService, isConfigured } from '../../platform/configuration/common/configuration.js'; - import { IFileService } from '../../platform/files/common/files.js'; +-import { ITitleService } from '../services/title/browser/titleService.js'; -import { ServicesAccessor } from '../../platform/instantiation/common/instantiation.js'; +-import { StartupKind, ILifecycleService } from '../services/lifecycle/common/lifecycle.js'; +-import { getMenuBarVisibility, IPath, hasNativeTitlebar, hasCustomTitlebar, TitleBarSetting, CustomTitleBarVisibility, useWindowControlsOverlay, DEFAULT_EMPTY_WINDOW_SIZE, DEFAULT_WORKSPACE_WINDOW_SIZE, hasNativeMenu, MenuSettings } from '../../platform/window/common/window.js'; +-import { IHostService } from '../services/host/browser/host.js'; +-import { IBrowserWorkbenchEnvironmentService } from '../services/environment/browser/environmentService.js'; +-import { IEditorService } from '../services/editor/common/editorService.js'; +-import { EditorGroupLayout, GroupOrientation, GroupsOrder, IEditorGroupsService } from '../services/editor/common/editorGroupsService.js'; +-import { Part } from './part.js'; +-import { IStatusbarService } from '../services/statusbar/browser/statusbar.js'; + import { IFileService } from '../../platform/files/common/files.js'; +-import { isCodeEditor } from '../../editor/browser/editorBrowser.js'; +-import { assertReturnsDefined } from '../../base/common/types.js'; +import { IInstantiationService, ServicesAccessor } from '../../platform/instantiation/common/instantiation.js'; - import { ILogService } from '../../platform/log/common/log.js'; ++import { ILogService } from '../../platform/log/common/log.js'; import { INotificationService, NotificationsFilter } from '../../platform/notification/common/notification.js'; - import { IStorageService, StorageScope, StorageTarget } from '../../platform/storage/common/storage.js'; ++import { IStorageService, StorageScope, StorageTarget } from '../../platform/storage/common/storage.js'; ++import { ITelemetryService } from '../../platform/telemetry/common/telemetry.js'; + import { IThemeService } from '../../platform/theme/common/themeService.js'; ++import { CustomTitleBarVisibility, DEFAULT_EMPTY_WINDOW_SIZE, DEFAULT_WORKSPACE_WINDOW_SIZE, getMenuBarVisibility, hasCustomTitlebar, hasNativeMenu, hasNativeTitlebar, IPath, MenuSettings, TitleBarSetting, useWindowControlsOverlay } from '../../platform/window/common/window.js'; ++import { isTemporaryWorkspace, IWorkspaceContextService, WorkbenchState } from '../../platform/workspace/common/workspace.js'; ++import { EditorInputCapabilities, GroupIdentifier, isResourceEditorInput, IUntypedEditorInput, pathsToEditors } from '../common/editor.js'; ++import { DiffEditorInput } from '../common/editor/diffEditorInput.js'; + import { WINDOW_ACTIVE_BORDER, WINDOW_INACTIVE_BORDER } from '../common/theme.js'; +-import { LineNumbersType } from '../../editor/common/config/editorOptions.js'; +-import { URI } from '../../base/common/uri.js'; + import { IViewDescriptorService, ViewContainerLocation } from '../common/views.js'; +-import { DiffEditorInput } from '../common/editor/diffEditorInput.js'; +-import { mark } from '../../base/common/performance.js'; +-import { IExtensionService } from '../services/extensions/common/extensions.js'; +-import { ILogService } from '../../platform/log/common/log.js'; ++import { IAuxiliaryWindowService } from '../services/auxiliaryWindow/browser/auxiliaryWindowService.js'; + import { IBannerService } from '../services/banner/browser/bannerService.js'; ++import { EditorGroupLayout, GroupOrientation, GroupsOrder, IEditorGroupsService } from '../services/editor/common/editorGroupsService.js'; ++import { IEditorService } from '../services/editor/common/editorService.js'; ++import { IBrowserWorkbenchEnvironmentService } from '../services/environment/browser/environmentService.js'; ++import { IExtensionService } from '../services/extensions/common/extensions.js'; ++import { IHostService } from '../services/host/browser/host.js'; ++import { ActivityBarPosition, EditorActionsLocation, EditorTabsMode, isHorizontal, isMultiWindowPart, IWorkbenchLayoutService, LayoutSettings, MULTI_WINDOW_PARTS, PanelAlignment, partOpensMaximizedFromString, PartOpensMaximizedOptions, Parts, Position, positionFromString, positionToString, shouldShowCustomTitleBar, SINGLE_WINDOW_PARTS, ZenModeSettings } from '../services/layout/browser/layoutService.js'; ++import { ILifecycleService, StartupKind } from '../services/lifecycle/common/lifecycle.js'; + import { IPaneCompositePartService } from '../services/panecomposite/browser/panecomposite.js'; ++import { IStatusbarService } from '../services/statusbar/browser/statusbar.js'; ++import { ITitleService } from '../services/title/browser/titleService.js'; ++import { Part } from './part.js'; + import { AuxiliaryBarPart } from './parts/auxiliarybar/auxiliaryBarPart.js'; +-import { ITelemetryService } from '../../platform/telemetry/common/telemetry.js'; +-import { IAuxiliaryWindowService } from '../services/auxiliaryWindow/browser/auxiliaryWindowService.js'; ++import { PanelPart } from './parts/panel/panelPart.js'; ++import { SidebarPart } from './parts/sidebar/sidebarPart.js'; + + //#region Layout Implementation + @@ -300,7 +300,7 @@ export abstract class Layout extends Disposable implements IWorkbenchLayoutServi constructor( protected readonly parent: HTMLElement, - private readonly layoutOptions?: { resetLayout: boolean } -+ private readonly layoutOptions?: { resetLayout?: boolean, customEditorRestore?: (accessor: ServicesAccessor, defaultLayout: boolean) => Promise } ++ private readonly layoutOptions?: { resetLayout?: boolean; customEditorRestore?: (accessor: ServicesAccessor, defaultLayout: boolean) => Promise } ) { super(); @@ -43,7 +104,7 @@ index 7bd4c09ebf7..5bd0bad173a 100644 })); } -+ const customEditorRestorePromise = instantiationService.invokeFunction(this.layoutOptions?.customEditorRestore ?? (async () => { }), this.state.initialization.layout?.editors != null) ++ const customEditorRestorePromise = instantiationService.invokeFunction(this.layoutOptions?.customEditorRestore ?? (async () => { }), !!this.state.initialization.layout?.editors); + // do not block the overall layout ready flow from potentially // slow editors to resolve on startup diff --git a/vscode-patches/0085-refactor-split-code-to-be-able-to-override-behavior.patch b/vscode-patches/0085-refactor-split-code-to-be-able-to-override-behavior.patch new file mode 100644 index 00000000..14733e1a --- /dev/null +++ b/vscode-patches/0085-refactor-split-code-to-be-able-to-override-behavior.patch @@ -0,0 +1,49 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Lo=C3=AFc=20Mangeonjean?= +Date: Mon, 8 Dec 2025 16:12:34 +0100 +Subject: [PATCH] refactor: split code to be able to override behavior + +--- + .../keybinding/browser/keybindingService.ts | 18 +++++++++++------- + 1 file changed, 11 insertions(+), 7 deletions(-) + +diff --git a/src/vs/workbench/services/keybinding/browser/keybindingService.ts b/src/vs/workbench/services/keybinding/browser/keybindingService.ts +index 6929b00e4bd..61a33210678 100644 +--- a/src/vs/workbench/services/keybinding/browser/keybindingService.ts ++++ b/src/vs/workbench/services/keybinding/browser/keybindingService.ts +@@ -245,17 +245,11 @@ export class WorkbenchKeybindingService extends AbstractKeybindingService { + return; + } + +- const keyboard: IKeyboard | null = (mainWindow.navigator).keyboard; +- + if (BrowserFeatures.keyboard === KeyboardSupport.None) { + return; + } + +- if (browser.isFullscreen(mainWindow)) { +- keyboard?.lock(['Escape']); +- } else { +- keyboard?.unlock(); +- } ++ this.lockKeyCodes(browser.isFullscreen(mainWindow) ? ['Escape'] : []); + + // update resolver which will bring back all unbound keyboard shortcuts + this._cachedResolver = null; +@@ -263,6 +257,16 @@ export class WorkbenchKeybindingService extends AbstractKeybindingService { + })); + } + ++ protected lockKeyCodes(keyCodes: string[]): void { ++ const keyboard: IKeyboard | null = (mainWindow.navigator).keyboard; ++ ++ if (keyCodes.length > 0) { ++ keyboard?.lock(keyCodes); ++ } else { ++ keyboard?.unlock(); ++ } ++ } ++ + public override dispose(): void { + this._contributions.forEach(c => c.listener?.dispose()); + this._contributions.length = 0;