diff options
author | Anna Koskinen <Ansku@users.noreply.github.com> | 2020-05-05 10:46:38 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-05 10:46:38 +0300 |
commit | 1dcf3dc338fc5587575211d0463721e85b586691 (patch) | |
tree | 1903c25b319a4392de6367ff4a6cbbac0842219f /client/src | |
parent | 35e441f2ecf19b779fb99ccc58d658dc29c03d80 (diff) | |
download | vaadin-framework-1dcf3dc338fc5587575211d0463721e85b586691.tar.gz vaadin-framework-1dcf3dc338fc5587575211d0463721e85b586691.zip |
Take overlays into account in getConnectorForElement. (#11980)
* Take overlays into account in getConnectorForElement.
Fixes #11212
Diffstat (limited to 'client/src')
-rw-r--r-- | client/src/main/java/com/vaadin/client/Util.java | 31 |
1 files changed, 24 insertions, 7 deletions
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. * |