From 323832d0c00a1f3fa2f275f201dae27c927e3975 Mon Sep 17 00:00:00 2001 From: meganrogge Date: Thu, 27 Jul 2023 09:42:33 -0700 Subject: [PATCH 1/2] fix #188822 --- .../accessibility/browser/accessibility.contribution.ts | 7 ++++++- src/vs/workbench/services/hover/browser/hover.ts | 6 ++++++ src/vs/workbench/services/hover/browser/hoverService.ts | 9 +++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/vs/workbench/contrib/accessibility/browser/accessibility.contribution.ts b/src/vs/workbench/contrib/accessibility/browser/accessibility.contribution.ts index 459443e257c..87600340d4e 100644 --- a/src/vs/workbench/contrib/accessibility/browser/accessibility.contribution.ts +++ b/src/vs/workbench/contrib/accessibility/browser/accessibility.contribution.ts @@ -27,6 +27,7 @@ import { getNotificationFromContext } from 'vs/workbench/browser/parts/notificat import { IListService, WorkbenchList } from 'vs/platform/list/browser/listService'; import { NotificationFocusedContext } from 'vs/workbench/common/contextkeys'; import { IAccessibleViewService, AccessibleViewService, IAccessibleContentProvider, IAccessibleViewOptions, AccessibleViewType, accessibleViewIsShown } from 'vs/workbench/contrib/accessibility/browser/accessibleView'; +import { IHoverService } from 'vs/workbench/services/hover/browser/hover'; registerAccessibilityConfiguration(); registerSingleton(IAccessibleViewService, AccessibleViewService, InstantiationType.Delayed); @@ -133,6 +134,8 @@ class HoverAccessibleViewContribution extends Disposable { const contextViewService = accessor.get(IContextViewService); const contextViewElement = contextViewService.getContextViewElement(); const extensionHoverContent = contextViewElement?.textContent ?? undefined; + const hoverService = accessor.get(IHoverService); + if (contextViewElement.classList.contains('accessible-view-container') || !extensionHoverContent) { // The accessible view, itself, uses the context view service to display the text. We don't want to read that. return false; @@ -140,7 +143,9 @@ class HoverAccessibleViewContribution extends Disposable { accessibleViewService.show({ verbositySettingKey: AccessibilityVerbositySettingId.Hover, provideContent() { return extensionHoverContent; }, - onClose() { }, + onClose() { + hoverService.showAndFocusLastHover(); + }, options: this._options }); return true; diff --git a/src/vs/workbench/services/hover/browser/hover.ts b/src/vs/workbench/services/hover/browser/hover.ts index 1c850be8540..8f2e241b7d2 100644 --- a/src/vs/workbench/services/hover/browser/hover.ts +++ b/src/vs/workbench/services/hover/browser/hover.ts @@ -37,6 +37,12 @@ export interface IHoverService { * "locked" via the alt/option key. */ hideHover(): void; + + /** + * This should only be used until we have the ability to show multiple context views + * simultaneously. #188822 + */ + showAndFocusLastHover(): void; } export interface IHoverWidget extends IDisposable { diff --git a/src/vs/workbench/services/hover/browser/hoverService.ts b/src/vs/workbench/services/hover/browser/hoverService.ts index faefae51c91..819b4d9f0a9 100644 --- a/src/vs/workbench/services/hover/browser/hoverService.ts +++ b/src/vs/workbench/services/hover/browser/hoverService.ts @@ -23,6 +23,7 @@ export class HoverService implements IHoverService { private _currentHoverOptions: IHoverOptions | undefined; private _currentHover: HoverWidget | undefined; + private _lastHoverOptions: IHoverOptions | undefined; private _lastFocusedElementBeforeOpen: HTMLElement | undefined; @@ -40,6 +41,7 @@ export class HoverService implements IHoverService { return undefined; } this._currentHoverOptions = options; + this._lastHoverOptions = options; if (options.trapFocus && document.activeElement) { this._lastFocusedElementBeforeOpen = document.activeElement as HTMLElement; } else { @@ -108,6 +110,13 @@ export class HoverService implements IHoverService { } } + showAndFocusLastHover(): void { + if (!this._lastHoverOptions) { + return; + } + this.showHover(this._lastHoverOptions, true); + } + private _keyDown(e: KeyboardEvent, hover: HoverWidget, hideOnKeyDown: boolean) { if (e.key === 'Alt') { hover.isLocked = true; From 75c890512c9b6d6251906e1fbd4bfe1a2bb0b2ee Mon Sep 17 00:00:00 2001 From: meganrogge Date: Thu, 27 Jul 2023 10:56:06 -0700 Subject: [PATCH 2/2] fix error --- src/vs/workbench/test/browser/workbenchTestServices.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/vs/workbench/test/browser/workbenchTestServices.ts b/src/vs/workbench/test/browser/workbenchTestServices.ts index 7b9f31a10e4..a0d2d45b753 100644 --- a/src/vs/workbench/test/browser/workbenchTestServices.ts +++ b/src/vs/workbench/test/browser/workbenchTestServices.ts @@ -749,6 +749,7 @@ class TestHoverService implements IHoverService { }; return this.currentHover; } + showAndFocusLastHover(): void { } hideHover(): void { this.currentHover?.dispose(); }