summaryrefslogtreecommitdiffstats
path: root/client/src
diff options
context:
space:
mode:
authorAnna Koskinen <Ansku@users.noreply.github.com>2020-05-05 10:46:38 +0300
committerGitHub <noreply@github.com>2020-05-05 10:46:38 +0300
commit1dcf3dc338fc5587575211d0463721e85b586691 (patch)
tree1903c25b319a4392de6367ff4a6cbbac0842219f /client/src
parent35e441f2ecf19b779fb99ccc58d658dc29c03d80 (diff)
downloadvaadin-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.java31
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.
*