From da8ce352a724674b0df949a0a017356b325efc97 Mon Sep 17 00:00:00 2001 From: hengsin Date: Tue, 9 Apr 2024 01:11:23 +0800 Subject: [PATCH] IDEMPIERE-6094 AD Window: error notification popup for detail tab is being shown at the wrong position (#2299) --- .../adempiere/webui/adwindow/DetailPane.java | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/DetailPane.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/DetailPane.java index 6ec39c0636..5e5fd1a36e 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/DetailPane.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/DetailPane.java @@ -73,6 +73,7 @@ import org.zkoss.zul.A; import org.zkoss.zul.Div; import org.zkoss.zul.Hbox; import org.zkoss.zul.Hlayout; +import org.zkoss.zul.LayoutRegion; import org.zkoss.zul.Popup; import org.zkoss.zul.Separator; import org.zkoss.zul.Space; @@ -708,7 +709,8 @@ public class DetailPane extends Panel implements EventListener, IdSpace { String labelText = buildLabelText(status); if (error) { - Clients.showNotification(buildNotificationText(status), "error", findTabpanel(this), "top_left", 3500, true); + Component ref = isCollapsed(this) ? findTabpanel(this) : findTabpanel(messageContainer); + Clients.showNotification(buildNotificationText(status), "error", ref, "top_left", 3500, true); } Label label = new Label(labelText); messageContainer.appendChild(label); @@ -735,6 +737,21 @@ public class DetailPane extends Panel implements EventListener, IdSpace { } } + /** + * Is parent of detailPane in collapsed state + * @param detailPane + * @return true if parent of detailPane is in collapsed state + */ + private boolean isCollapsed(DetailPane detailPane) { + Component parent = detailPane.getParent(); + while (parent != null) { + if (parent instanceof LayoutRegion lr) + return !lr.isOpen(); + parent = parent.getParent(); + } + return false; + } + /** * Shorten status text to a more presentable length. * @param statusText @@ -811,8 +828,8 @@ public class DetailPane extends Panel implements EventListener, IdSpace { * @param error * @param msg */ - private void showPopup(boolean error, String msg) { - Clients.showNotification(buildNotificationText(msg), "error", findTabpanel(this), "at_pointer", 3500, true); + private void showPopup(boolean error, String msg) { + Clients.showNotification(buildNotificationText(msg), "error", null, "at_pointer", 3500, true); } /** @@ -1065,7 +1082,7 @@ public class DetailPane extends Panel implements EventListener, IdSpace { private Component findTabpanel(Component comp) { Component parent = comp.getParent(); while (parent != null) { - if (parent instanceof Tabpanel) + if (parent instanceof org.adempiere.webui.component.Tabpanel) return parent; parent = parent.getParent();