diff --git a/src/vs/editor/contrib/dropOrPasteInto/browser/postEditWidget.ts b/src/vs/editor/contrib/dropOrPasteInto/browser/postEditWidget.ts index 357a481eb87e9..e584c56b0b5f1 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 0290c45011377..e066ef8ee56d9 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 25f52b57d3f86..91c5741ddd2b2 100644 --- a/src/vs/workbench/contrib/scm/browser/scmViewPane.ts +++ b/src/vs/workbench/contrib/scm/browser/scmViewPane.ts @@ -3,109 +3,110 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./media/scm'; -import { Event, Emitter } from 'vs/base/common/event'; -import { basename, dirname } from 'vs/base/common/resources'; -import { IDisposable, Disposable, DisposableStore, combinedDisposable, dispose, toDisposable, MutableDisposable, IReference, DisposableMap } from 'vs/base/common/lifecycle'; -import { ViewPane, IViewPaneOptions, ViewAction } from 'vs/workbench/browser/parts/views/viewPane'; -import { append, $, Dimension, asCSSUrl, trackFocus, clearNode, prepend } from 'vs/base/browser/dom'; -import { IListVirtualDelegate, IIdentityProvider } from 'vs/base/browser/ui/list/list'; -import { ISCMHistoryItem, ISCMHistoryItemChange, ISCMHistoryProviderCacheEntry, SCMHistoryItemChangeTreeElement, SCMHistoryItemGroupTreeElement, SCMHistoryItemTreeElement, SCMViewSeparatorElement } from 'vs/workbench/contrib/scm/common/history'; -import { ISCMResourceGroup, ISCMResource, InputValidationType, ISCMRepository, ISCMInput, IInputValidation, ISCMViewService, ISCMViewVisibleRepositoryChangeEvent, ISCMService, SCMInputChangeReason, VIEW_PANE_ID, ISCMActionButton, ISCMActionButtonDescriptor, ISCMRepositorySortKey, ISCMInputValueProviderContext, ISCMProvider } from 'vs/workbench/contrib/scm/common/scm'; -import { ResourceLabels, IResourceLabel, IFileLabelOptions } from 'vs/workbench/browser/labels'; -import { CountBadge } from 'vs/base/browser/ui/countBadge/countBadge'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; -import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { IContextViewService, IContextMenuService } from 'vs/platform/contextview/browser/contextView'; -import { IContextKeyService, IContextKey, ContextKeyExpr, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; -import { ICommandService } from 'vs/platform/commands/common/commands'; -import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { MenuItemAction, IMenuService, registerAction2, MenuId, IAction2Options, MenuRegistry, Action2, IMenu } from 'vs/platform/actions/common/actions'; -import { IAction, ActionRunner, Action, Separator, IActionRunner } from 'vs/base/common/actions'; +import { IDragAndDropData } from 'vs/base/browser/dnd'; +import { $, Dimension, append, asCSSUrl, clearNode, prepend, trackFocus } from 'vs/base/browser/dom'; +import { DEFAULT_FONT_FAMILY } from 'vs/base/browser/fonts'; import { ActionBar, IActionViewItemProvider } from 'vs/base/browser/ui/actionbar/actionbar'; -import { IThemeService, IFileIconTheme } from 'vs/platform/theme/common/themeService'; -import { isSCMResource, isSCMResourceGroup, connectPrimaryMenuToInlineActionBar, isSCMRepository, isSCMInput, collectContextMenuActions, getActionViewItemProvider, isSCMActionButton, isSCMViewService, isSCMHistoryItemGroupTreeElement, isSCMHistoryItemTreeElement, isSCMHistoryItemChangeTreeElement, toDiffEditorArguments, isSCMResourceNode, isSCMHistoryItemChangeNode, isSCMViewSeparator, connectPrimaryMenu } from './util'; -import { WorkbenchCompressibleAsyncDataTree, IOpenEvent } from 'vs/platform/list/browser/listService'; -import { IConfigurationService, ConfigurationTarget } from 'vs/platform/configuration/common/configuration'; -import { disposableTimeout, Sequencer, ThrottledDelayer, Throttler } from 'vs/base/common/async'; -import { ITreeNode, ITreeFilter, ITreeSorter, ITreeContextMenuEvent, ITreeDragAndDrop, ITreeDragOverReaction, IAsyncDataSource } from 'vs/base/browser/ui/tree/tree'; -import { ResourceTree, IResourceNode } from 'vs/base/common/resourceTree'; -import { ICompressibleTreeRenderer, ICompressibleKeyboardNavigationLabelProvider } from 'vs/base/browser/ui/tree/objectTree'; -import { Iterable } from 'vs/base/common/iterator'; +import { Button, ButtonWithDescription, ButtonWithDropdown } from 'vs/base/browser/ui/button/button'; +import { AnchorAlignment } from 'vs/base/browser/ui/contextview/contextview'; +import { CountBadge } from 'vs/base/browser/ui/countBadge/countBadge'; +import { IconLabel } from 'vs/base/browser/ui/iconLabel/iconLabel'; +import { IIdentityProvider, IListVirtualDelegate } from 'vs/base/browser/ui/list/list'; +import { ElementsDragAndDropData, ListViewTargetSector } from 'vs/base/browser/ui/list/listView'; +import { IListAccessibilityProvider } from 'vs/base/browser/ui/list/listWidget'; +import { LabelFuzzyScore } from 'vs/base/browser/ui/tree/abstractTree'; +import { IAsyncDataTreeViewState, ITreeCompressionDelegate } from 'vs/base/browser/ui/tree/asyncDataTree'; import { ICompressedTreeNode } from 'vs/base/browser/ui/tree/compressedObjectTreeModel'; -import { URI } from 'vs/base/common/uri'; -import { FileKind } from 'vs/platform/files/common/files'; -import { compareFileNames, comparePaths } from 'vs/base/common/comparers'; -import { FuzzyScore, createMatches, IMatch } from 'vs/base/common/filters'; -import { IViewDescriptorService, ViewContainerLocation } from 'vs/workbench/common/views'; -import { localize } from 'vs/nls'; +import { ICompressibleKeyboardNavigationLabelProvider, ICompressibleTreeRenderer } from 'vs/base/browser/ui/tree/objectTree'; +import { IAsyncDataSource, ITreeContextMenuEvent, ITreeDragAndDrop, ITreeDragOverReaction, ITreeFilter, ITreeNode, ITreeSorter } from 'vs/base/browser/ui/tree/tree'; +import { Action, ActionRunner, IAction, IActionRunner, Separator } from 'vs/base/common/actions'; import { flatten } from 'vs/base/common/arrays'; -import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; -import { EditorResourceAccessor, SideBySideEditor } from 'vs/workbench/common/editor'; -import { SIDE_BAR_BACKGROUND, PANEL_BACKGROUND } from 'vs/workbench/common/theme'; +import { Sequencer, ThrottledDelayer, Throttler, disposableTimeout } from 'vs/base/common/async'; +import { CancellationTokenSource } from 'vs/base/common/cancellation'; +import { Codicon } from 'vs/base/common/codicons'; +import { compareFileNames, comparePaths } from 'vs/base/common/comparers'; +import { Emitter, Event } from 'vs/base/common/event'; +import { FuzzyScore, IMatch, createMatches } from 'vs/base/common/filters'; +import { stripIcons } from 'vs/base/common/iconLabels'; +import { Iterable } from 'vs/base/common/iterator'; +import { KeyCode } from 'vs/base/common/keyCodes'; +import { Disposable, DisposableMap, DisposableStore, IDisposable, IReference, MutableDisposable, combinedDisposable, dispose, toDisposable } from 'vs/base/common/lifecycle'; +import { Schemas } from 'vs/base/common/network'; +import { clamp } from 'vs/base/common/numbers'; +import * as platform from 'vs/base/common/platform'; +import { basename, dirname } from 'vs/base/common/resources'; +import { IResourceNode, ResourceTree } from 'vs/base/common/resourceTree'; +import { compare, format } from 'vs/base/common/strings'; +import { ThemeIcon } from 'vs/base/common/themables'; +import { URI } from 'vs/base/common/uri'; +import 'vs/css!./media/scm'; +import { IEditorConstructionOptions } from 'vs/editor/browser/config/editorConfiguration'; +import { EditorExtensionsRegistry } from 'vs/editor/browser/editorExtensions'; import { CodeEditorWidget, ICodeEditorWidgetOptions } from 'vs/editor/browser/widget/codeEditor/codeEditorWidget'; +import { MarkdownRenderer, openLinkFromMarkdown } from 'vs/editor/browser/widget/markdownRenderer/browser/markdownRenderer'; +import { EditorOption, EditorOptions, IEditorOptions } from 'vs/editor/common/config/editorOptions'; +import { EditOperation } from 'vs/editor/common/core/editOperation'; +import { Selection } from 'vs/editor/common/core/selection'; +import { ILanguageService } from 'vs/editor/common/languages/language'; import { ITextModel } from 'vs/editor/common/model'; -import { IEditorConstructionOptions } from 'vs/editor/browser/config/editorConfiguration'; -import { getSimpleEditorOptions } from 'vs/workbench/contrib/codeEditor/browser/simpleEditorOptions'; import { IModelService } from 'vs/editor/common/services/model'; -import { EditorExtensionsRegistry } from 'vs/editor/browser/editorExtensions'; -import { MenuPreventer } from 'vs/workbench/contrib/codeEditor/browser/menuPreventer'; -import { SelectionClipboardContributionID } from 'vs/workbench/contrib/codeEditor/browser/selectionClipboard'; -import { EditorDictation } from 'vs/workbench/contrib/codeEditor/browser/dictation/editorDictation'; +import { IResolvedTextEditorModel, ITextModelContentProvider, ITextModelService } from 'vs/editor/common/services/resolverService'; +import { CodeActionController } from 'vs/editor/contrib/codeAction/browser/codeActionController'; +import { ColorDetector } from 'vs/editor/contrib/colorPicker/browser/colorDetector'; import { ContextMenuController } from 'vs/editor/contrib/contextmenu/browser/contextmenu'; -import * as platform from 'vs/base/common/platform'; -import { compare, format } from 'vs/base/common/strings'; -import { SuggestController } from 'vs/editor/contrib/suggest/browser/suggestController'; -import { SnippetController2 } from 'vs/editor/contrib/snippet/browser/snippetController2'; -import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; +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 { FormatOnType } from 'vs/editor/contrib/format/browser/formatActions'; import { HoverController } from 'vs/editor/contrib/hover/browser/hover'; -import { ColorDetector } from 'vs/editor/contrib/colorPicker/browser/colorDetector'; +import { InlineCompletionsController } from 'vs/editor/contrib/inlineCompletions/browser/inlineCompletionsController'; import { LinkDetector } from 'vs/editor/contrib/links/browser/links'; +import { MessageController } from 'vs/editor/contrib/message/browser/messageController'; +import { SnippetController2 } from 'vs/editor/contrib/snippet/browser/snippetController2'; +import { SuggestController } from 'vs/editor/contrib/suggest/browser/suggestController'; +import { localize } from 'vs/nls'; +import { DropdownWithPrimaryActionViewItem } from 'vs/platform/actions/browser/dropdownWithPrimaryActionViewItem'; +import { createActionViewItem, createAndFillInActionBarActions, createAndFillInContextMenuActions } from 'vs/platform/actions/browser/menuEntryActionViewItem'; +import { IMenuWorkbenchToolBarOptions, MenuWorkbenchToolBar, WorkbenchToolBar } from 'vs/platform/actions/browser/toolbar'; +import { Action2, IAction2Options, IMenu, IMenuService, MenuId, MenuItemAction, MenuRegistry, registerAction2 } from 'vs/platform/actions/common/actions'; +import { ICommandService } from 'vs/platform/commands/common/commands'; +import { ConfigurationTarget, IConfigurationService } from 'vs/platform/configuration/common/configuration'; +import { ContextKeyExpr, IContextKey, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; +import { IContextMenuService, IContextViewService } from 'vs/platform/contextview/browser/contextView'; +import { CodeDataTransfers } from 'vs/platform/dnd/browser/dnd'; +import { FileKind } from 'vs/platform/files/common/files'; +import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; +import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; +import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; +import { ILabelService } from 'vs/platform/label/common/label'; +import { IOpenEvent, WorkbenchCompressibleAsyncDataTree } from 'vs/platform/list/browser/listService'; +import { ILogService } from 'vs/platform/log/common/log'; +import { INotificationService } from 'vs/platform/notification/common/notification'; import { IOpenerService } from 'vs/platform/opener/common/opener'; +import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { IListAccessibilityProvider } from 'vs/base/browser/ui/list/listWidget'; -import { ILanguageService } from 'vs/editor/common/languages/language'; -import { ILabelService } from 'vs/platform/label/common/label'; -import { KeyCode } from 'vs/base/common/keyCodes'; -import { DEFAULT_FONT_FAMILY } from 'vs/base/browser/fonts'; -import { Codicon } from 'vs/base/common/codicons'; -import { ThemeIcon } from 'vs/base/common/themables'; -import { AnchorAlignment } from 'vs/base/browser/ui/contextview/contextview'; -import { RepositoryActionRunner, RepositoryRenderer } from 'vs/workbench/contrib/scm/browser/scmRepositoryRenderer'; +import { defaultButtonStyles, defaultCountBadgeStyles } from 'vs/platform/theme/browser/defaultStyles'; +import { foreground, listActiveSelectionForeground, registerColor, transparent } from 'vs/platform/theme/common/colorRegistry'; import { ColorScheme } from 'vs/platform/theme/common/theme'; -import { LabelFuzzyScore } from 'vs/base/browser/ui/tree/abstractTree'; -import { Selection } from 'vs/editor/common/core/selection'; +import { IFileIconTheme, IThemeService } from 'vs/platform/theme/common/themeService'; +import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; +import { fillEditorsDragData } from 'vs/workbench/browser/dnd'; +import { IFileLabelOptions, IResourceLabel, ResourceLabels } from 'vs/workbench/browser/labels'; import { API_OPEN_DIFF_EDITOR_COMMAND_ID, API_OPEN_EDITOR_COMMAND_ID } from 'vs/workbench/browser/parts/editor/editorCommands'; -import { createActionViewItem, createAndFillInActionBarActions, createAndFillInContextMenuActions } from 'vs/platform/actions/browser/menuEntryActionViewItem'; -import { MarkdownRenderer, openLinkFromMarkdown } from 'vs/editor/browser/widget/markdownRenderer/browser/markdownRenderer'; -import { Button, ButtonWithDescription, ButtonWithDropdown } from 'vs/base/browser/ui/button/button'; -import { INotificationService } from 'vs/platform/notification/common/notification'; +import { IViewPaneOptions, ViewAction, ViewPane } from 'vs/workbench/browser/parts/views/viewPane'; +import { EditorResourceAccessor, SideBySideEditor } from 'vs/workbench/common/editor'; +import { PANEL_BACKGROUND, SIDE_BAR_BACKGROUND } from 'vs/workbench/common/theme'; +import { IViewDescriptorService, ViewContainerLocation } from 'vs/workbench/common/views'; +import { EditorDictation } from 'vs/workbench/contrib/codeEditor/browser/dictation/editorDictation'; +import { MenuPreventer } from 'vs/workbench/contrib/codeEditor/browser/menuPreventer'; +import { SelectionClipboardContributionID } from 'vs/workbench/contrib/codeEditor/browser/selectionClipboard'; +import { getSimpleEditorOptions } from 'vs/workbench/contrib/codeEditor/browser/simpleEditorOptions'; +import { RepositoryActionRunner, RepositoryRenderer } from 'vs/workbench/contrib/scm/browser/scmRepositoryRenderer'; import { RepositoryContextKeys } from 'vs/workbench/contrib/scm/browser/scmViewService'; -import { DragAndDropController } from 'vs/editor/contrib/dnd/browser/dnd'; -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'; -import { InlineCompletionsController } from 'vs/editor/contrib/inlineCompletions/browser/inlineCompletionsController'; -import { CodeActionController } from 'vs/editor/contrib/codeAction/browser/codeActionController'; -import { IResolvedTextEditorModel, ITextModelContentProvider, ITextModelService } from 'vs/editor/common/services/resolverService'; -import { Schemas } from 'vs/base/common/network'; -import { IDragAndDropData } from 'vs/base/browser/dnd'; -import { fillEditorsDragData } from 'vs/workbench/browser/dnd'; -import { ElementsDragAndDropData, ListViewTargetSector } from 'vs/base/browser/ui/list/listView'; -import { CodeDataTransfers } from 'vs/platform/dnd/browser/dnd'; -import { FormatOnType } from 'vs/editor/contrib/format/browser/formatActions'; -import { EditorOption, EditorOptions, IEditorOptions } from 'vs/editor/common/config/editorOptions'; -import { IAsyncDataTreeViewState, ITreeCompressionDelegate } from 'vs/base/browser/ui/tree/asyncDataTree'; -import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; -import { EditOperation } from 'vs/editor/common/core/editOperation'; -import { stripIcons } from 'vs/base/common/iconLabels'; -import { IconLabel } from 'vs/base/browser/ui/iconLabel/iconLabel'; -import { foreground, listActiveSelectionForeground, registerColor, transparent } from 'vs/platform/theme/common/colorRegistry'; -import { IMenuWorkbenchToolBarOptions, MenuWorkbenchToolBar, WorkbenchToolBar } from 'vs/platform/actions/browser/toolbar'; -import { CancellationTokenSource } from 'vs/base/common/cancellation'; -import { DropdownWithPrimaryActionViewItem } from 'vs/platform/actions/browser/dropdownWithPrimaryActionViewItem'; -import { clamp } from 'vs/base/common/numbers'; -import { ILogService } from 'vs/platform/log/common/log'; +import { ISCMHistoryItem, ISCMHistoryItemChange, ISCMHistoryProviderCacheEntry, SCMHistoryItemChangeTreeElement, SCMHistoryItemGroupTreeElement, SCMHistoryItemTreeElement, SCMViewSeparatorElement } from 'vs/workbench/contrib/scm/common/history'; +import { IInputValidation, ISCMActionButton, ISCMActionButtonDescriptor, ISCMInput, ISCMInputValueProviderContext, ISCMProvider, ISCMRepository, ISCMRepositorySortKey, ISCMResource, ISCMResourceGroup, ISCMService, ISCMViewService, ISCMViewVisibleRepositoryChangeEvent, InputValidationType, SCMInputChangeReason, VIEW_PANE_ID } from 'vs/workbench/contrib/scm/common/scm'; +import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; +import { collectContextMenuActions, connectPrimaryMenu, connectPrimaryMenuToInlineActionBar, getActionViewItemProvider, isSCMActionButton, isSCMHistoryItemChangeNode, isSCMHistoryItemChangeTreeElement, isSCMHistoryItemGroupTreeElement, isSCMHistoryItemTreeElement, isSCMInput, isSCMRepository, isSCMResource, isSCMResourceGroup, isSCMResourceNode, isSCMViewSeparator, isSCMViewService, toDiffEditorArguments } from './util'; // type SCMResourceTreeNode = IResourceNode; // type SCMHistoryItemChangeResourceTreeNode = IResourceNode; @@ -2465,7 +2466,9 @@ class SCMInputWidget { InlineCompletionsController.ID, CodeActionController.ID, FormatOnType.ID, - EditorDictation.ID + EditorDictation.ID, + CopyPasteController.ID, + DropIntoEditorController.ID, ]) }; @@ -2492,6 +2495,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);