From 3bcb9a5d9ddd8a55dbaa984ede7e42680dae87e3 Mon Sep 17 00:00:00 2001 From: Aiday Marlen Kyzy Date: Fri, 31 Jan 2025 16:56:13 +0100 Subject: [PATCH] EditContext : Synchornize clipboard.ts and view.ts EditContext information (#239341) adding code to synchornize clipboard.ts and view.ts --- src/vs/editor/browser/view.ts | 20 ++++++++++++------- .../contrib/clipboard/browser/clipboard.ts | 7 ++++--- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/vs/editor/browser/view.ts b/src/vs/editor/browser/view.ts index 1e883bfcd2b23..e1edfb83b10db 100644 --- a/src/vs/editor/browser/view.ts +++ b/src/vs/editor/browser/view.ts @@ -42,7 +42,7 @@ import { ViewCursors } from './viewParts/viewCursors/viewCursors.js'; import { ViewZones } from './viewParts/viewZones/viewZones.js'; import { WhitespaceOverlay } from './viewParts/whitespace/whitespace.js'; import { IEditorConfiguration } from '../common/config/editorConfiguration.js'; -import { EditorOption } from '../common/config/editorOptions.js'; +import { EditorOption, IComputedEditorOptions } from '../common/config/editorOptions.js'; import { Position } from '../common/core/position.js'; import { Range } from '../common/core/range.js'; import { Selection } from '../common/core/selection.js'; @@ -148,7 +148,7 @@ export class View extends ViewEventHandler { // Keyboard handler this._experimentalEditContextEnabled = this._context.configuration.options.get(EditorOption.experimentalEditContextEnabled); this._accessibilitySupport = this._context.configuration.options.get(EditorOption.accessibilitySupport); - this._editContext = this._instantiateEditContext(this._experimentalEditContextEnabled, this._accessibilitySupport); + this._editContext = this._instantiateEditContext(); this._viewParts.push(this._editContext); @@ -277,10 +277,9 @@ export class View extends ViewEventHandler { this._pointerHandler = this._register(new PointerHandler(this._context, this._viewController, this._createPointerHandlerHelper())); } - private _instantiateEditContext(experimentalEditContextEnabled: boolean, accessibilitySupport: AccessibilitySupport): AbstractEditContext { - const domNode = dom.getWindow(this._overflowGuardContainer.domNode); - const isEditContextSupported = EditContext.supported(domNode); - if (experimentalEditContextEnabled && isEditContextSupported && accessibilitySupport !== AccessibilitySupport.Enabled) { + private _instantiateEditContext(): AbstractEditContext { + const usingExperimentalEditContext = useExperimentalEditContext(dom.getWindow(this._overflowGuardContainer.domNode), this._context.configuration.options); + if (usingExperimentalEditContext) { return this._instantiationService.createInstance(NativeEditContext, this._ownerID, this._context, this._overflowGuardContainer, this._viewController, this._createTextAreaHandlerHelper()); } else { return this._instantiationService.createInstance(TextAreaEditContext, this._context, this._overflowGuardContainer, this._viewController, this._createTextAreaHandlerHelper()); @@ -298,7 +297,7 @@ export class View extends ViewEventHandler { const isEditContextFocused = this._editContext.isFocused(); const indexOfEditContext = this._viewParts.indexOf(this._editContext); this._editContext.dispose(); - this._editContext = this._instantiateEditContext(experimentalEditContextEnabled, accessibilitySupport); + this._editContext = this._instantiateEditContext(); if (isEditContextFocused) { this._editContext.focus(); } @@ -852,3 +851,10 @@ class EditorRenderingCoordinator { } } } + +export function useExperimentalEditContext(activeWindow: CodeWindow, options: IComputedEditorOptions): boolean { + const isEditContextSupported = EditContext.supported(activeWindow); + const experimentalEditContextEnabled = options.get(EditorOption.experimentalEditContextEnabled); + const accessibilitySupport = options.get(EditorOption.accessibilitySupport); + return experimentalEditContextEnabled && isEditContextSupported && accessibilitySupport !== AccessibilitySupport.Enabled; +} diff --git a/src/vs/editor/contrib/clipboard/browser/clipboard.ts b/src/vs/editor/contrib/clipboard/browser/clipboard.ts index 15fc67e770b49..17484a5b1e4a2 100644 --- a/src/vs/editor/contrib/clipboard/browser/clipboard.ts +++ b/src/vs/editor/contrib/clipboard/browser/clipboard.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import * as browser from '../../../../base/browser/browser.js'; -import { getActiveDocument } from '../../../../base/browser/dom.js'; +import { getActiveDocument, getWindow } from '../../../../base/browser/dom.js'; import { KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; import * as platform from '../../../../base/common/platform.js'; import * as nls from '../../../../nls.js'; @@ -18,6 +18,7 @@ import { NativeEditContextRegistry } from '../../../browser/controller/editConte import { ICodeEditor } from '../../../browser/editorBrowser.js'; import { Command, EditorAction, MultiCommand, registerEditorAction } from '../../../browser/editorExtensions.js'; import { ICodeEditorService } from '../../../browser/services/codeEditorService.js'; +import { useExperimentalEditContext } from '../../../browser/view.js'; import { EditorOption } from '../../../common/config/editorOptions.js'; import { Handler } from '../../../common/editorCommon.js'; import { EditorContextKeys } from '../../../common/editorContextKeys.js'; @@ -235,8 +236,8 @@ if (PasteAction) { if (focusedEditor && focusedEditor.hasModel() && focusedEditor.hasTextFocus()) { // execCommand(paste) does not work with edit context let result: boolean; - const experimentalEditContextEnabled = focusedEditor.getOption(EditorOption.experimentalEditContextEnabled); - if (experimentalEditContextEnabled) { + const usingExperimentalEditContext = useExperimentalEditContext(getWindow(focusedEditor.getDomNode()), focusedEditor.getOptions()); + if (usingExperimentalEditContext) { // Since we can not call execCommand('paste') on a dom node with edit context set // we added a hidden text area that receives the paste execution // see nativeEditContext.ts for more details