diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/ex/IdeFocusTraversalPolicy.java b/platform/platform-impl/src/com/intellij/openapi/wm/ex/IdeFocusTraversalPolicy.java index 2a624d0113db..ae57522c8b42 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/ex/IdeFocusTraversalPolicy.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/ex/IdeFocusTraversalPolicy.java @@ -17,6 +17,7 @@ package com.intellij.openapi.wm.ex; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.impl.EditorComponentImpl; +import com.intellij.openapi.util.Computable; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -56,11 +57,22 @@ public class IdeFocusTraversalPolicy extends LayoutFocusTraversalPolicyExt { if (focusTraversalPolicy.getClass().getName().indexOf("LegacyGlueFocusTraversalPolicy") >=0) { return component; } - final Component defaultComponent = focusTraversalPolicy.getDefaultComponent(component); + + Component defaultComponent; + if (focusTraversalPolicy instanceof LayoutFocusTraversalPolicyExt) { + final LayoutFocusTraversalPolicyExt extPolicy = (LayoutFocusTraversalPolicyExt)focusTraversalPolicy; + defaultComponent = extPolicy.queryImpl(new Computable() { + @Override + public Component compute() { + return extPolicy.getDefaultComponent(component); + } + }); + } else { + defaultComponent = focusTraversalPolicy.getDefaultComponent(component); + } + if (defaultComponent instanceof JComponent) { return (JComponent)defaultComponent; - }else{ - return null; } } diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/ex/LayoutFocusTraversalPolicyExt.java b/platform/platform-impl/src/com/intellij/openapi/wm/ex/LayoutFocusTraversalPolicyExt.java index 50d1d028af8e..5a64a1cd8bd6 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/ex/LayoutFocusTraversalPolicyExt.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/ex/LayoutFocusTraversalPolicyExt.java @@ -15,6 +15,7 @@ */ package com.intellij.openapi.wm.ex; +import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.registry.Registry; import org.jetbrains.annotations.Nullable; @@ -33,6 +34,8 @@ public class LayoutFocusTraversalPolicyExt extends LayoutFocusTraversalPolicy{ private boolean myNoDefaultComponent; private Object myNoDefaultComponentRequestor; + private boolean myQueryImpl = false; + public void setNoDefaultComponent(boolean noDefaultComponent, Object requestor) { if (noDefaultComponent) { myNoDefaultComponent = noDefaultComponent; @@ -46,6 +49,8 @@ public class LayoutFocusTraversalPolicyExt extends LayoutFocusTraversalPolicy{ } public boolean isNoDefaultComponent() { + if (myQueryImpl) return false; + return myNoDefaultComponent || Registry.is("actionSystem.noDefaultComponent"); } @@ -158,4 +163,14 @@ public class LayoutFocusTraversalPolicyExt extends LayoutFocusTraversalPolicy{ protected Component getComponentBeforeImpl(final Container focusCycleRoot, final Component aComponent) { return super.getComponentBefore(focusCycleRoot, aComponent); } + + public Component queryImpl(Computable runnable) { + try { + myQueryImpl = true; + return runnable.compute(); + } + finally { + myQueryImpl = false; + } + } }