From 9efebbe2e44555351fccbdb3c6bd27d97347fd56 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Wed, 3 Apr 2024 10:39:11 -0700 Subject: [PATCH] Enable copy paste api in scm input (#209466) * Enable dnd and copy paste apis in scm input For #209460 Enables dropping or pasting a file from the vscode/system explorer into the scminput to insert the file name. Currently nothing happens when you try this In the future will also allow extensions to hook into these apis * Revert organize imports * Remove duplication --- .../contrib/dropOrPasteInto/browser/postEditWidget.ts | 8 ++++++++ .../editor/contrib/snippet/browser/snippetController2.ts | 6 +++--- src/vs/workbench/contrib/scm/browser/scmViewPane.ts | 9 ++++++++- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/vs/editor/contrib/dropOrPasteInto/browser/postEditWidget.ts b/src/vs/editor/contrib/dropOrPasteInto/browser/postEditWidget.ts index 357a481eb87..e584c56b0b5 100644 --- a/src/vs/editor/contrib/dropOrPasteInto/browser/postEditWidget.ts +++ b/src/vs/editor/contrib/dropOrPasteInto/browser/postEditWidget.ts @@ -164,6 +164,9 @@ export class PostEditWidgetManager 1) { this.show(editRange ?? primaryRange, edits, async (newEditIndex) => { const model = this._editor.getModel(); diff --git a/src/vs/editor/contrib/snippet/browser/snippetController2.ts b/src/vs/editor/contrib/snippet/browser/snippetController2.ts index 0290c450113..e066ef8ee56 100644 --- a/src/vs/editor/contrib/snippet/browser/snippetController2.ts +++ b/src/vs/editor/contrib/snippet/browser/snippetController2.ts @@ -331,7 +331,7 @@ registerEditorCommand(new CommandCtor({ handler: ctrl => ctrl.next(), kbOpts: { weight: KeybindingWeight.EditorContrib + 30, - kbExpr: EditorContextKeys.editorTextFocus, + kbExpr: EditorContextKeys.textInputFocus, primary: KeyCode.Tab } })); @@ -341,7 +341,7 @@ registerEditorCommand(new CommandCtor({ handler: ctrl => ctrl.prev(), kbOpts: { weight: KeybindingWeight.EditorContrib + 30, - kbExpr: EditorContextKeys.editorTextFocus, + kbExpr: EditorContextKeys.textInputFocus, primary: KeyMod.Shift | KeyCode.Tab } })); @@ -351,7 +351,7 @@ registerEditorCommand(new CommandCtor({ handler: ctrl => ctrl.cancel(true), kbOpts: { weight: KeybindingWeight.EditorContrib + 30, - kbExpr: EditorContextKeys.editorTextFocus, + kbExpr: EditorContextKeys.textInputFocus, primary: KeyCode.Escape, secondary: [KeyMod.Shift | KeyCode.Escape] } diff --git a/src/vs/workbench/contrib/scm/browser/scmViewPane.ts b/src/vs/workbench/contrib/scm/browser/scmViewPane.ts index 4f2f70b99af..335d6ca3c72 100644 --- a/src/vs/workbench/contrib/scm/browser/scmViewPane.ts +++ b/src/vs/workbench/contrib/scm/browser/scmViewPane.ts @@ -82,6 +82,7 @@ import { Button, ButtonWithDescription, ButtonWithDropdown } from 'vs/base/brows import { INotificationService } from 'vs/platform/notification/common/notification'; import { RepositoryContextKeys } from 'vs/workbench/contrib/scm/browser/scmViewService'; import { DragAndDropController } from 'vs/editor/contrib/dnd/browser/dnd'; +import { CopyPasteController } from 'vs/editor/contrib/dropOrPasteInto/browser/copyPasteController'; import { DropIntoEditorController } from 'vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorController'; import { MessageController } from 'vs/editor/contrib/message/browser/messageController'; import { defaultButtonStyles, defaultCountBadgeStyles } from 'vs/platform/theme/browser/defaultStyles'; @@ -2491,6 +2492,7 @@ class SCMInputWidget { ColorDetector.ID, ContextMenuController.ID, DragAndDropController.ID, + CopyPasteController.ID, DropIntoEditorController.ID, LinkDetector.ID, MenuPreventer.ID, @@ -2502,7 +2504,7 @@ class SCMInputWidget { InlineCompletionsController.ID, CodeActionController.ID, FormatOnType.ID, - EditorDictation.ID + EditorDictation.ID, ]) }; @@ -2529,6 +2531,11 @@ class SCMInputWidget { }, 0); })); + this.disposables.add(this.inputEditor.onDidBlurEditorWidget(() => { + CopyPasteController.get(this.inputEditor)?.clearWidgets(); + DropIntoEditorController.get(this.inputEditor)?.clearWidgets(); + })); + const firstLineKey = this.contextKeyService.createKey('scmInputIsInFirstPosition', false); const lastLineKey = this.contextKeyService.createKey('scmInputIsInLastPosition', false);