diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADTabpanel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADTabpanel.java index 63e3a2beaf..647dd52311 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADTabpanel.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADTabpanel.java @@ -1416,7 +1416,7 @@ DataStatusListener, IADTabpanel, IdSpace, IFieldEditorContainer } else { if (activate) { formContainer.setVisible(activate); - if (!isMobile()) + if (!isMobile() && !isDetailPaneMode()) focusToFirstEditor(); } } @@ -2330,5 +2330,10 @@ DataStatusListener, IADTabpanel, IdSpace, IFieldEditorContainer { } + + public AbstractADWindowContent getADWindowContent() + { + return windowPanel; + } } diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/AbstractADWindowContent.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/AbstractADWindowContent.java index 22c10d2cf7..fdf28ba9b7 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/AbstractADWindowContent.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/AbstractADWindowContent.java @@ -1170,11 +1170,30 @@ public abstract class AbstractADWindowContent extends AbstractUIPart implements /** * restore focus to last known focus editor (if any) + * @return true if there's last focus editor */ - public void focusToLastFocusEditor() { + public boolean focusToLastFocusEditor() { + return focusToLastFocusEditor(false); + } + + /** + * restore focus to last known focus editor (if any) + * @param defer true to schedule for later/defer execution + * @return true if there's last focus editor + */ + public boolean focusToLastFocusEditor(boolean defer) { if (lastFocusEditor != null && lastFocusEditor instanceof HtmlBasedComponent && - lastFocusEditor.getPage() != null && LayoutUtils.isReallyVisible(lastFocusEditor)) - ((HtmlBasedComponent)lastFocusEditor).focus(); + lastFocusEditor.getPage() != null && LayoutUtils.isReallyVisible(lastFocusEditor)) { + if (defer) { + final HtmlBasedComponent editor = (HtmlBasedComponent) lastFocusEditor; + Executions.schedule(getComponent().getDesktop(), e -> editor.focus(), new Event("onScheduleFocusToLastFocusEditor")); + } else { + ((HtmlBasedComponent)lastFocusEditor).focus(); + } + return true; + } else { + return false; + } } /** diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/CompositeADTabbox.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/CompositeADTabbox.java index 9e27253358..bb8ff3ed8e 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/CompositeADTabbox.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/CompositeADTabbox.java @@ -388,6 +388,10 @@ public class CompositeADTabbox extends AbstractADTabbox if (tabPanel != headerTab && headerTab.getDetailPane() != null) { if (b != null && b.booleanValue()) { onActivateDetail(tabPanel); + if (headerTab instanceof ADTabpanel) { + if (!((ADTabpanel) headerTab).getADWindowContent().focusToLastFocusEditor(true)) + ((ADTabpanel) headerTab).getADWindowContent().focusToActivePanel(); + } } } } diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/ComboEditorBox.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/ComboEditorBox.java index 4e1474899d..fa41c97f11 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/ComboEditorBox.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/ComboEditorBox.java @@ -189,4 +189,9 @@ public class ComboEditorBox extends Div { } } + + @Override + public void focus() { + txt.focus(); + } } diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/EditorBox.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/EditorBox.java index 6538bb64ee..3142b5cdab 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/EditorBox.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/EditorBox.java @@ -162,4 +162,9 @@ public class EditorBox extends Div { } } + + @Override + public void focus() { + txt.focus(); + } } diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/Urlbox.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/Urlbox.java index b998c93c73..1c9e4d1e59 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/Urlbox.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/Urlbox.java @@ -170,4 +170,9 @@ public class Urlbox extends Div } } + + @Override + public void focus() { + txt.focus(); + } } \ No newline at end of file