From bb7a76bf2b4149d61465de63d94c8a9668bd4135 Mon Sep 17 00:00:00 2001 From: Alex Dima Date: Wed, 24 Nov 2021 13:42:54 +0100 Subject: [PATCH] Make FocusTracker shadow dom aware --- src/vs/base/browser/dom.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/vs/base/browser/dom.ts b/src/vs/base/browser/dom.ts index cff9352a148..1f20d93442f 100644 --- a/src/vs/base/browser/dom.ts +++ b/src/vs/base/browser/dom.ts @@ -939,9 +939,15 @@ class FocusTracker extends Disposable implements IFocusTracker { private _refreshStateHandler: () => void; + private static hasFocusWithin(element: HTMLElement): boolean { + const shadowRoot = getShadowRoot(element); + const activeElement = (shadowRoot ? shadowRoot.activeElement : document.activeElement); + return isAncestor(activeElement, element); + } + constructor(element: HTMLElement | Window) { super(); - let hasFocus = isAncestor(document.activeElement, element); + let hasFocus = FocusTracker.hasFocusWithin(element); let loosingFocus = false; const onFocus = () => { @@ -966,7 +972,7 @@ class FocusTracker extends Disposable implements IFocusTracker { }; this._refreshStateHandler = () => { - let currentNodeHasFocus = isAncestor(document.activeElement, element); + let currentNodeHasFocus = FocusTracker.hasFocusWithin(element); if (currentNodeHasFocus !== hasFocus) { if (hasFocus) { onBlur();