From b474e9882c6d38b97e0cbecac1e609f6c8cfd1ed Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Tue, 20 Nov 2018 16:28:32 +0300 Subject: [PATCH] IDEA-194482 ui: fix focus loss when switching tabs in toolwindow Fix regression after c53b0b87bc90c783a95c45cb85dcd1689d8ea9cc: We no longer use `content.getComponent().transferFocus()` to transfer focus, so should pass correct focusable component to the `ContentManagerImpl.requestFocus`. --- .../src/com/intellij/ui/content/impl/ContentImpl.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/platform/platform-impl/src/com/intellij/ui/content/impl/ContentImpl.java b/platform/platform-impl/src/com/intellij/ui/content/impl/ContentImpl.java index fdf8544c8c67..f88f1e3af082 100644 --- a/platform/platform-impl/src/com/intellij/ui/content/impl/ContentImpl.java +++ b/platform/platform-impl/src/com/intellij/ui/content/impl/ContentImpl.java @@ -13,6 +13,7 @@ import com.intellij.ui.content.AlertIcon; import com.intellij.ui.content.Content; import com.intellij.ui.content.ContentManager; import com.intellij.util.IconUtil; +import com.intellij.util.ObjectUtils; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -72,7 +73,11 @@ public class ContentImpl extends UserDataHolderBase implements Content { @Override public JComponent getPreferredFocusableComponent() { - return myFocusRequest == null ? myComponent : myFocusRequest.compute(); + if (myFocusRequest != null) return myFocusRequest.compute(); + if (myComponent == null) return null; + Container traversalRoot = myComponent.isFocusCycleRoot() ? myComponent : myComponent.getFocusCycleRootAncestor(); + if (traversalRoot == null) return null; + return ObjectUtils.tryCast(traversalRoot.getFocusTraversalPolicy().getDefaultComponent(myComponent), JComponent.class); } @Override