diff --git a/src/vs/workbench/contrib/scm/browser/scmViewPane.ts b/src/vs/workbench/contrib/scm/browser/scmViewPane.ts index df056df39217bc5d74280af9112d1d719412e75d..0925d7059e90a64543da744c943e0a077a27edf0 100644 --- a/src/vs/workbench/contrib/scm/browser/scmViewPane.ts +++ b/src/vs/workbench/contrib/scm/browser/scmViewPane.ts @@ -79,6 +79,8 @@ import { Command } from 'vs/editor/common/modes'; import { renderCodicons } from 'vs/base/common/codicons'; import { ToolBar } from 'vs/base/browser/ui/toolbar/toolbar'; import { AnchorAlignment } from 'vs/base/browser/ui/contextview/contextview'; +import { domEvent } from 'vs/base/browser/event'; +import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent'; type TreeElement = ISCMRepository | ISCMInput | ISCMResourceGroup | IResourceNode | ISCMResource; @@ -272,6 +274,7 @@ class InputRenderer implements ICompressibleTreeRenderer void, + private focusTree: () => void, @IInstantiationService private instantiationService: IInstantiationService, ) { } @@ -279,10 +282,16 @@ class InputRenderer implements ICompressibleTreeRenderer new StandardKeyboardEvent(e)); + const onEscape = Event.filter(onKeyDown, e => e.keyCode === KeyCode.Escape); + disposables.add(onEscape(this.focusTree)); - return { inputWidget, disposable: Disposable.None, templateDisposable: inputWidget }; + return { inputWidget, disposable: Disposable.None, templateDisposable: disposables }; } renderElement(node: ITreeNode, index: number, templateData: InputTemplate): void { @@ -1541,7 +1550,7 @@ export class SCMViewPane extends ViewPane { this._register(repositories.onDidSplice(() => this.updateActions())); - this.inputRenderer = this.instantiationService.createInstance(InputRenderer, this.layoutCache, (input, height) => this.tree.updateElementHeight(input, height)); + this.inputRenderer = this.instantiationService.createInstance(InputRenderer, this.layoutCache, (input, height) => this.tree.updateElementHeight(input, height), () => this.tree.domFocus()); const delegate = new ProviderListDelegate(this.inputRenderer); const actionViewItemProvider = (action: IAction) => this.getActionViewItem(action);