From ef14938a46de106531d5b7b84ef6d06dcb752eb5 Mon Sep 17 00:00:00 2001 From: isidor Date: Thu, 7 May 2020 15:54:42 +0200 Subject: [PATCH] F6 and shift+F6 also focus on activity bar --- src/vs/workbench/browser/actions/navigationActions.ts | 9 +++++---- src/vs/workbench/browser/layout.ts | 6 +++++- .../browser/parts/activitybar/activitybarPart.ts | 4 ++++ src/vs/workbench/browser/parts/compositeBar.ts | 6 ++++++ .../services/activityBar/browser/activityBarService.ts | 5 +++++ 5 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/vs/workbench/browser/actions/navigationActions.ts b/src/vs/workbench/browser/actions/navigationActions.ts index d9d2323d6a6..22bae467a85 100644 --- a/src/vs/workbench/browser/actions/navigationActions.ts +++ b/src/vs/workbench/browser/actions/navigationActions.ts @@ -202,8 +202,9 @@ class NavigateDownAction extends BaseNavigationAction { } function findVisibleNeighbour(layoutService: IWorkbenchLayoutService, part: Parts, next: boolean): Parts { - const neighbour = part === Parts.EDITOR_PART ? (next ? Parts.STATUSBAR_PART : Parts.PANEL_PART) : part === Parts.STATUSBAR_PART ? (next ? Parts.SIDEBAR_PART : Parts.EDITOR_PART) : - part === Parts.SIDEBAR_PART ? (next ? Parts.PANEL_PART : Parts.STATUSBAR_PART) : part === Parts.PANEL_PART ? (next ? Parts.EDITOR_PART : Parts.SIDEBAR_PART) : Parts.EDITOR_PART; + const neighbour = part === Parts.EDITOR_PART ? (next ? Parts.STATUSBAR_PART : Parts.PANEL_PART) : part === Parts.STATUSBAR_PART ? (next ? Parts.ACTIVITYBAR_PART : Parts.EDITOR_PART) : + part === Parts.ACTIVITYBAR_PART ? (next ? Parts.SIDEBAR_PART : Parts.STATUSBAR_PART) : part === Parts.SIDEBAR_PART ? (next ? Parts.PANEL_PART : Parts.ACTIVITYBAR_PART) : + part === Parts.PANEL_PART ? (next ? Parts.EDITOR_PART : Parts.SIDEBAR_PART) : Parts.EDITOR_PART; if (layoutService.isVisible(neighbour) || neighbour === Parts.EDITOR_PART) { return neighbour; } @@ -212,8 +213,8 @@ function findVisibleNeighbour(layoutService: IWorkbenchLayoutService, part: Part } function focusNextOrPreviousPart(layoutService: IWorkbenchLayoutService, next: boolean): void { - const currentlyFocusedPart = layoutService.hasFocus(Parts.EDITOR_PART) ? Parts.EDITOR_PART : layoutService.hasFocus(Parts.STATUSBAR_PART) ? Parts.STATUSBAR_PART : - layoutService.hasFocus(Parts.SIDEBAR_PART) ? Parts.SIDEBAR_PART : layoutService.hasFocus(Parts.PANEL_PART) ? Parts.PANEL_PART : undefined; + const currentlyFocusedPart = layoutService.hasFocus(Parts.EDITOR_PART) ? Parts.EDITOR_PART : layoutService.hasFocus(Parts.ACTIVITYBAR_PART) ? Parts.ACTIVITYBAR_PART : + layoutService.hasFocus(Parts.STATUSBAR_PART) ? Parts.STATUSBAR_PART : layoutService.hasFocus(Parts.SIDEBAR_PART) ? Parts.SIDEBAR_PART : layoutService.hasFocus(Parts.PANEL_PART) ? Parts.PANEL_PART : undefined; let partToFocus = Parts.EDITOR_PART; if (currentlyFocusedPart) { partToFocus = findVisibleNeighbour(layoutService, currentlyFocusedPart, next); diff --git a/src/vs/workbench/browser/layout.ts b/src/vs/workbench/browser/layout.ts index 715a0a9d1c1..bb0d6570508 100644 --- a/src/vs/workbench/browser/layout.ts +++ b/src/vs/workbench/browser/layout.ts @@ -177,6 +177,7 @@ export abstract class Layout extends Disposable implements IWorkbenchLayoutServi private backupFileService!: IBackupFileService; private notificationService!: INotificationService; private themeService!: IThemeService; + private activityBarService!: IActivityBarService; protected readonly state = { fullscreen: false, @@ -260,8 +261,8 @@ export abstract class Layout extends Disposable implements IWorkbenchLayoutServi this.viewDescriptorService = accessor.get(IViewDescriptorService); this.titleService = accessor.get(ITitleService); this.notificationService = accessor.get(INotificationService); + this.activityBarService = accessor.get(IActivityBarService); accessor.get(IStatusbarService); // not used, but called to ensure instantiated - accessor.get(IActivityBarService); // not used, but called to ensure instantiated // Listeners this.registerLayoutListeners(); @@ -846,6 +847,9 @@ export abstract class Layout extends Disposable implements IWorkbenchLayoutServi activeViewlet.focus(); } break; + case Parts.ACTIVITYBAR_PART: + this.activityBarService.focusActivityBar(); + break; default: // Status Bar, Activity Bar and Title Bar simply pass focus to container const container = this.getContainer(part); diff --git a/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts b/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts index 0ffadfcdac9..377942abb07 100644 --- a/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts +++ b/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts @@ -168,6 +168,10 @@ export class ActivitybarPart extends Part implements IActivityBarService { this.registerListeners(); } + focusActivityBar(): void { + this.compositeBar.focus(); + } + private registerListeners(): void { // View Container Changes diff --git a/src/vs/workbench/browser/parts/compositeBar.ts b/src/vs/workbench/browser/parts/compositeBar.ts index b78760dbf66..72fa96f1ff5 100644 --- a/src/vs/workbench/browser/parts/compositeBar.ts +++ b/src/vs/workbench/browser/parts/compositeBar.ts @@ -253,6 +253,12 @@ export class CompositeBar extends Widget implements ICompositeBar { return actionBarDiv; } + focus(): void { + if (this.compositeSwitcherBar) { + this.compositeSwitcherBar.focus(); + } + } + layout(dimension: Dimension): void { this.dimension = dimension; if (dimension.height === 0 || dimension.width === 0) { diff --git a/src/vs/workbench/services/activityBar/browser/activityBarService.ts b/src/vs/workbench/services/activityBar/browser/activityBarService.ts index e42d22de533..dc76b07f76b 100644 --- a/src/vs/workbench/services/activityBar/browser/activityBarService.ts +++ b/src/vs/workbench/services/activityBar/browser/activityBarService.ts @@ -26,4 +26,9 @@ export interface IActivityBarService { * Returns id of visible viewlets following the visual order. */ getVisibleViewContainerIds(): string[]; + + /** + * Focuses the activity bar. + */ + focusActivityBar(): void; } -- GitLab