From 1dcf3dc338fc5587575211d0463721e85b586691 Mon Sep 17 00:00:00 2001 From: Anna Koskinen Date: Tue, 5 May 2020 10:46:38 +0300 Subject: Take overlays into account in getConnectorForElement. (#11980) * Take overlays into account in getConnectorForElement. Fixes #11212 --- client/src/main/java/com/vaadin/client/Util.java | 31 ++++++++++++++++++------ 1 file changed, 24 insertions(+), 7 deletions(-) (limited to 'client/src') diff --git a/client/src/main/java/com/vaadin/client/Util.java b/client/src/main/java/com/vaadin/client/Util.java index 02c21179bf..02c545f563 100644 --- a/client/src/main/java/com/vaadin/client/Util.java +++ b/client/src/main/java/com/vaadin/client/Util.java @@ -579,15 +579,10 @@ public class Util { } if (connector != null) { - // check that inside the rootElement - while (browseElement != null && browseElement != rootElement) { - browseElement = browseElement.getParentElement(); - } - if (browseElement != rootElement) { - return null; - } else { + if (isConnectedToParent(browseElement, rootElement)) { return connector; } + return null; } browseElement = browseElement.getParentElement(); @@ -606,6 +601,28 @@ public class Util { } } + private static boolean isConnectedToParent(Element element, + Element rootElement) { + Element browseElement = element; + // check if inside the rootElement + while (browseElement != null && browseElement != rootElement) { + browseElement = browseElement.getParentElement(); + } + if (browseElement == rootElement) { + return true; + } + // Not inside the root, possibly inside a VOverlay such as + // VWindow instead. + @SuppressWarnings("deprecation") + VOverlay overlay = WidgetUtil.findWidget(element, VOverlay.class, + false); + if (overlay != null && overlay.getOwner() != null) { + browseElement = overlay.getOwner().getElement(); + return isConnectedToParent(browseElement, rootElement); + } + return false; + } + /** * Will (attempt) to focus the given DOM Element. * -- cgit v1.2.3