diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/FocusManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/FocusManagerImpl.java index 398baa454972..04ffad38f33b 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/FocusManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/FocusManagerImpl.java @@ -114,7 +114,8 @@ public class FocusManagerImpl extends IdeFocusManager implements Disposable { final Component c = fe.getComponent(); if (c instanceof Window || c == null) return false; - Component parent = UIUtil.findUltimateParent(c); + Component parent = SwingUtilities.getWindowAncestor(c); + if (parent instanceof IdeFrame) { myLastFocused.put((IdeFrame)parent, new WeakReference(c)); } diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/InternalDecorator.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/InternalDecorator.java index 62aafc8fc636..0e74bed98051 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/InternalDecorator.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/InternalDecorator.java @@ -176,10 +176,12 @@ public final class InternalDecorator extends JPanel implements Queryable, TypeSa } public boolean isFocused() { - Component component = IdeFocusManager.getInstance(myProject).getFocusedDescendantFor(myToolWindow.getComponent()); + IdeFocusManager fm = IdeFocusManager.getInstance(myProject); + Component component = fm.getFocusedDescendantFor(myToolWindow.getComponent()); if (component != null) return true; - Component owner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner(); + Component owner = fm.getLastFocusedFor(WindowManager.getInstance().getIdeFrame(myProject)); + return owner != null && SwingUtilities.isDescendingFrom(owner, myToolWindow.getComponent()); }