IDEMPIERE-6172 Open from a highlighted window, DateRangePicker popup will auto close when selecting an item in dropdown list (#2400)

- Implement workaround for highlighted+popup+combobox
This commit is contained in:
hengsin 2024-06-19 16:30:21 +08:00 committed by Carlos Ruiz
parent 061ef5fec4
commit 4e250b6a52
1 changed files with 19 additions and 2 deletions

View File

@ -28,10 +28,12 @@ import java.util.Properties;
import org.adempiere.webui.LayoutUtils;
import org.adempiere.webui.component.ToolBarButton;
import org.adempiere.webui.component.Window;
import org.adempiere.webui.editor.WDateEditor;
import org.adempiere.webui.editor.WEditor;
import org.adempiere.webui.theme.ThemeManager;
import org.compiere.util.Env;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.event.Events;
/**
@ -74,9 +76,24 @@ public class DateRangeButton extends ToolBarButton implements WEditor.DynamicDis
setImage(ThemeManager.getThemeResource(IMAGES_CONTEXT_HISTORY_PNG));
DateRangePicker popup = new DateRangePicker(editor, editor2);
this.setTooltip(popup);
this.addEventListener(Events.ON_CLICK, event -> {
popup.setPage(this.getPage());
Window window = null;
Component component = this.getParent();
while(component != null) {
if (component instanceof Window w) {
window = w;
break;
} else {
component = component.getParent();
}
}
// Popup must be a child of highlighted parent, otherwise combobox wouldn't work
// https://tracker.zkoss.org/browse/ZK-5740
if (window != null && "highlighted".equals(window.getMode())) {
window.appendChild(popup);
} else {
popup.setPage(this.getPage());
}
popup.open(this, "after_center");
LayoutUtils.autoDetachOnClose(popup);
});