diff --git a/src/vs/workbench/contrib/scm/browser/repositoryPane.ts b/src/vs/workbench/contrib/scm/browser/repositoryPane.ts index 29ea757ca33ae6086357e56a87d046e28dbf61aa..0691d5245522a57529dee6a6586a0f5586c04e5f 100644 --- a/src/vs/workbench/contrib/scm/browser/repositoryPane.ts +++ b/src/vs/workbench/contrib/scm/browser/repositoryPane.ts @@ -151,10 +151,7 @@ interface ResourceTemplate { class RepositoryPaneActionRunner extends ActionRunner { - constructor( - private getSelectedResources: () => (ISCMResource | IResourceNode)[], - private focus: () => void - ) { + constructor(private getSelectedResources: () => (ISCMResource | IResourceNode)[]) { super(); } @@ -168,7 +165,6 @@ class RepositoryPaneActionRunner extends ActionRunner { const actualContext = contextIsSelected ? selection : [context]; const args = flatten(actualContext.map(e => ResourceTree.isResourceNode(e) ? ResourceTree.collect(e) : [e])); await action.run(...args); - this.focus(); } } @@ -181,8 +177,7 @@ class ResourceRenderer implements ICompressibleTreeRenderer ViewModel, private labels: ResourceLabels, private actionViewItemProvider: IActionViewItemProvider, - private getSelectedResources: () => (ISCMResource | IResourceNode)[], - private focus: () => void, + private actionRunner: ActionRunner, private themeService: IThemeService, private menus: SCMMenus ) { } @@ -194,7 +189,7 @@ class ResourceRenderer implements ICompressibleTreeRenderer this.getSelectedResources()); + this._register(actionRunner); + this._register(actionRunner.onDidRun(() => { + if (this.repository.input.visible && this.inputEditor.hasWidgetFocus()) { + return; + } + + this.tree.domFocus(); + })); + const renderers = [ new ResourceGroupRenderer(actionViewItemProvider, this.themeService, this.menus), - new ResourceRenderer(() => this.viewModel, this.listLabels, actionViewItemProvider, () => this.getSelectedResources(), () => this.tree.domFocus(), this.themeService, this.menus) + new ResourceRenderer(() => this.viewModel, this.listLabels, actionViewItemProvider, actionRunner, this.themeService, this.menus) ]; const filter = new SCMTreeFilter(); @@ -1032,11 +1037,14 @@ export class RepositoryPane extends ViewPane { actions = this.menus.getResourceContextActions(element); } + const actionRunner = new RepositoryPaneActionRunner(() => this.getSelectedResources()); + actionRunner.onDidRun(() => this.tree.domFocus()); + this.contextMenuService.showContextMenu({ getAnchor: () => e.anchor, getActions: () => actions, getActionsContext: () => element, - actionRunner: new RepositoryPaneActionRunner(() => this.getSelectedResources(), () => this.tree.domFocus()) + actionRunner }); }