diff --git a/src/vs/editor/browser/controller/editContext/editContextUtils.ts b/src/vs/editor/browser/controller/editContext/editContext.ts similarity index 92% rename from src/vs/editor/browser/controller/editContext/editContextUtils.ts rename to src/vs/editor/browser/controller/editContext/editContext.ts index 19f284b10c0be..edcf2be336167 100644 --- a/src/vs/editor/browser/controller/editContext/editContextUtils.ts +++ b/src/vs/editor/browser/controller/editContext/editContext.ts @@ -10,7 +10,6 @@ import { ViewPart } from '../../view/viewPart.js'; export abstract class AbstractEditContext extends ViewPart { abstract domNode: FastDomNode; - abstract appendTo(overflowGuardContainer: FastDomNode): void; abstract focus(): void; abstract isFocused(): boolean; abstract refreshFocusState(): void; diff --git a/src/vs/editor/browser/controller/editContext/native/nativeEditContext.ts b/src/vs/editor/browser/controller/editContext/native/nativeEditContext.ts index 67cdd3b0bb07d..b3cca2d4166a4 100644 --- a/src/vs/editor/browser/controller/editContext/native/nativeEditContext.ts +++ b/src/vs/editor/browser/controller/editContext/native/nativeEditContext.ts @@ -18,7 +18,7 @@ import { ViewContext } from '../../../../common/viewModel/viewContext.js'; import { RestrictedRenderingContext, RenderingContext } from '../../../view/renderingContext.js'; import { ViewController } from '../../../view/viewController.js'; import { ClipboardStoredMetadata, getDataToCopy, InMemoryClipboardMetadataManager } from '../clipboardUtils.js'; -import { AbstractEditContext } from '../editContextUtils.js'; +import { AbstractEditContext } from '../editContext.js'; import { editContextAddDisposableListener, FocusTracker, ITypeData } from './nativeEditContextUtils.js'; import { ScreenReaderSupport } from './screenReaderSupport.js'; import { Range } from '../../../../common/core/range.js'; @@ -51,6 +51,7 @@ export class NativeEditContext extends AbstractEditContext { constructor( context: ViewContext, + overflowGuardContainer: FastDomNode, viewController: ViewController, private readonly _visibleRangeProvider: IVisibleRangeProvider, @IInstantiationService instantiationService: IInstantiationService, @@ -62,6 +63,9 @@ export class NativeEditContext extends AbstractEditContext { this.domNode.setClassName(`native-edit-context`); this._updateDomAttributes(); + overflowGuardContainer.appendChild(this.domNode); + this._parent = overflowGuardContainer.domNode; + this._focusTracker = this._register(new FocusTracker(this.domNode.domNode, (newFocusValue: boolean) => this._context.viewModel.setHasFocus(newFocusValue))); this._editContext = new EditContext(); @@ -123,11 +127,6 @@ export class NativeEditContext extends AbstractEditContext { super.dispose(); } - public appendTo(overflowGuardContainer: FastDomNode): void { - overflowGuardContainer.appendChild(this.domNode); - this._parent = overflowGuardContainer.domNode; - } - public setAriaOptions(): void { this._screenReaderSupport.setAriaOptions(); } diff --git a/src/vs/editor/browser/controller/editContext/textArea/textAreaEditContext.ts b/src/vs/editor/browser/controller/editContext/textArea/textAreaEditContext.ts index acbc89e9e8e13..72887583691f1 100644 --- a/src/vs/editor/browser/controller/editContext/textArea/textAreaEditContext.ts +++ b/src/vs/editor/browser/controller/editContext/textArea/textAreaEditContext.ts @@ -34,7 +34,7 @@ import { Color } from '../../../../../base/common/color.js'; import { IME } from '../../../../../base/common/ime.js'; import { IKeybindingService } from '../../../../../platform/keybinding/common/keybinding.js'; import { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js'; -import { AbstractEditContext } from '../editContextUtils.js'; +import { AbstractEditContext } from '../editContext.js'; import { ICompositionData, IPasteData, ITextAreaInputHost, TextAreaInput, TextAreaWrapper } from './textAreaEditContextInput.js'; import { ariaLabelForScreenReaderContent, ISimpleModel, newlinecount, PagedScreenReaderStrategy } from '../screenReaderUtils.js'; import { ClipboardDataToCopy, getDataToCopy } from '../clipboardUtils.js'; @@ -148,6 +148,7 @@ export class TextAreaEditContext extends AbstractEditContext { constructor( context: ViewContext, + overflowGuardContainer: FastDomNode, viewController: ViewController, visibleRangeProvider: IVisibleRangeProvider, @IKeybindingService private readonly _keybindingService: IKeybindingService, @@ -201,6 +202,9 @@ export class TextAreaEditContext extends AbstractEditContext { this.textAreaCover = createFastDomNode(document.createElement('div')); this.textAreaCover.setPosition('absolute'); + overflowGuardContainer.appendChild(this.textArea); + overflowGuardContainer.appendChild(this.textAreaCover); + const simpleModel: ISimpleModel = { getLineCount: (): number => { return this._context.viewModel.getLineCount(); @@ -466,11 +470,6 @@ export class TextAreaEditContext extends AbstractEditContext { return this.textArea; } - appendTo(overflowGuardContainer: FastDomNode): void { - overflowGuardContainer.appendChild(this.textArea); - overflowGuardContainer.appendChild(this.textAreaCover); - } - public writeScreenReaderContent(reason: string): void { this._textAreaInput.writeNativeTextAreaContent(reason); } diff --git a/src/vs/editor/browser/view.ts b/src/vs/editor/browser/view.ts index a094abf538c18..239621d32b27e 100644 --- a/src/vs/editor/browser/view.ts +++ b/src/vs/editor/browser/view.ts @@ -57,7 +57,7 @@ import { IInstantiationService } from '../../platform/instantiation/common/insta import { IColorTheme, getThemeTypeSelector } from '../../platform/theme/common/themeService.js'; import { ViewGpuContext } from './gpu/viewGpuContext.js'; import { ViewLinesGpu } from './viewParts/viewLinesGpu/viewLinesGpu.js'; -import { AbstractEditContext } from './controller/editContext/editContextUtils.js'; +import { AbstractEditContext } from './controller/editContext/editContext.js'; import { IVisibleRangeProvider, TextAreaEditContext } from './controller/editContext/textArea/textAreaEditContext.js'; import { NativeEditContext } from './controller/editContext/native/nativeEditContext.js'; import { RulersGpu } from './viewParts/rulersGpu/rulersGpu.js'; @@ -124,6 +124,10 @@ export class View extends ViewEventHandler { this._selections = [new Selection(1, 1, 1, 1)]; this._renderAnimationFrame = null; + this._overflowGuardContainer = createFastDomNode(document.createElement('div')); + PartFingerprints.write(this._overflowGuardContainer, PartFingerprint.OverflowGuard); + this._overflowGuardContainer.setClassName('overflow-guard'); + this._viewController = new ViewController(configuration, model, userInputEvents, commandDelegate); // The view context is passed on to most classes (basically to reduce param. counts in ctors) @@ -154,10 +158,6 @@ export class View extends ViewEventHandler { this._viewGpuContext = this._instantiationService.createInstance(ViewGpuContext, this._context); } - this._overflowGuardContainer = createFastDomNode(document.createElement('div')); - PartFingerprints.write(this._overflowGuardContainer, PartFingerprint.OverflowGuard); - this._overflowGuardContainer.setClassName('overflow-guard'); - this._scrollbar = new EditorScrollbar(this._context, this._linesContent, this.domNode, this._overflowGuardContainer); this._viewParts.push(this._scrollbar); @@ -247,7 +247,6 @@ export class View extends ViewEventHandler { this._overflowGuardContainer.appendChild(this._viewGpuContext.canvas); } this._overflowGuardContainer.appendChild(scrollDecoration.getDomNode()); - this._editContext.appendTo(this._overflowGuardContainer); this._overflowGuardContainer.appendChild(this._overlayWidgets.getDomNode()); this._overflowGuardContainer.appendChild(minimap.getDomNode()); this._overflowGuardContainer.appendChild(blockOutline.domNode); @@ -268,7 +267,7 @@ export class View extends ViewEventHandler { } private _instantiateEditContext(experimentalEditContextEnabled: boolean): AbstractEditContext { - return this._instantiationService.createInstance(experimentalEditContextEnabled ? NativeEditContext : TextAreaEditContext, this._context, this._viewController, this._createTextAreaHandlerHelper()); + return this._instantiationService.createInstance(experimentalEditContextEnabled ? NativeEditContext : TextAreaEditContext, this._context, this._overflowGuardContainer, this._viewController, this._createTextAreaHandlerHelper()); } private _updateEditContext(): void { @@ -279,7 +278,6 @@ export class View extends ViewEventHandler { this._experimentalEditContextEnabled = experimentalEditContextEnabled; this._editContext.dispose(); this._editContext = this._instantiateEditContext(experimentalEditContextEnabled); - this._editContext.appendTo(this._overflowGuardContainer); // Replace the view parts with the new edit context const indexOfEditContextHandler = this._viewParts.indexOf(this._editContext); if (indexOfEditContextHandler !== -1) {