From b0a913b761f79ddd2f5074354008cdc8b7cbdadd Mon Sep 17 00:00:00 2001 From: isidor Date: Fri, 11 Sep 2020 18:01:59 +0200 Subject: [PATCH] explorer: Should maintain row focus after deleting a file fixes #71315 --- .../workbench/contrib/files/browser/views/explorerView.ts | 7 +++++++ src/vs/workbench/contrib/files/common/explorerService.ts | 1 + src/vs/workbench/contrib/files/common/files.ts | 1 + 3 files changed, 9 insertions(+) diff --git a/src/vs/workbench/contrib/files/browser/views/explorerView.ts b/src/vs/workbench/contrib/files/browser/views/explorerView.ts index 75f19930b9ee3..72e20cee13d1b 100644 --- a/src/vs/workbench/contrib/files/browser/views/explorerView.ts +++ b/src/vs/workbench/contrib/files/browser/views/explorerView.ts @@ -588,6 +588,13 @@ export class ExplorerView extends ViewPane { return this.tree.updateChildren(toRefresh, recursive); } + focusNextIfItemFocused(item: ExplorerItem): void { + const focus = this.tree.getFocus(); + if (focus.length === 1 && focus[0] === item) { + this.tree.focusNext(); + } + } + getOptimalWidth(): number { const parentNode = this.tree.getHTMLElement(); const childNodes = ([] as HTMLElement[]).slice.call(parentNode.querySelectorAll('.explorer-item .label-name')); // select all file labels diff --git a/src/vs/workbench/contrib/files/common/explorerService.ts b/src/vs/workbench/contrib/files/common/explorerService.ts index 4ad1fc336d797..32a1b2fbe4d86 100644 --- a/src/vs/workbench/contrib/files/common/explorerService.ts +++ b/src/vs/workbench/contrib/files/common/explorerService.ts @@ -278,6 +278,7 @@ export class ExplorerService implements IExplorerService { const parent = element.parent; // Remove Element from Parent (Model) parent.removeChild(element); + this.view?.focusNextIfItemFocused(element); // Refresh Parent (View) await this.view?.refresh(false, parent); } diff --git a/src/vs/workbench/contrib/files/common/files.ts b/src/vs/workbench/contrib/files/common/files.ts index f0042c844bbbb..87d64214cab79 100644 --- a/src/vs/workbench/contrib/files/common/files.ts +++ b/src/vs/workbench/contrib/files/common/files.ts @@ -65,6 +65,7 @@ export interface IExplorerView { setTreeInput(): Promise; itemsCopied(tats: ExplorerItem[], cut: boolean, previousCut: ExplorerItem[] | undefined): void; setEditable(stat: ExplorerItem, isEditing: boolean): Promise; + focusNextIfItemFocused(item: ExplorerItem): void; } export const IExplorerService = createDecorator('explorerService');