diff --git a/platform-impl/src/com/intellij/openapi/wm/impl/ToolWindowManagerImpl.java b/platform-impl/src/com/intellij/openapi/wm/impl/ToolWindowManagerImpl.java index 65e952c1d46a..f6f78e891a11 100644 --- a/platform-impl/src/com/intellij/openapi/wm/impl/ToolWindowManagerImpl.java +++ b/platform-impl/src/com/intellij/openapi/wm/impl/ToolWindowManagerImpl.java @@ -107,6 +107,7 @@ public final class ToolWindowManagerImpl extends ToolWindowManagerEx implements private FocusCommand myFocusCommandOnAppActivation; private ActionCallback myCallbackOnActivation; + private WeakReference myFocusedComponentOnDeactivation; /** * invoked by reflection @@ -1705,6 +1706,8 @@ public final class ToolWindowManagerImpl extends ToolWindowManagerEx implements public void run() { if (checkForRejectOrByPass(command, forced, result)) return; + myFocusedComponentOnDeactivation = null; + if (myRequestFocusCmd == command) { myRequestFocusCmd = null; @@ -1806,6 +1809,12 @@ public final class ToolWindowManagerImpl extends ToolWindowManagerEx implements private class AppListener extends ApplicationAdapter { + + @Override + public void applicationDeactivated() { + myFocusedComponentOnDeactivation = new WeakReference(KeyboardFocusManager.getCurrentKeyboardFocusManager().getPermanentFocusOwner()); + } + @Override public void applicationActivated() { final FocusCommand cmd = myFocusCommandOnAppActivation; @@ -1814,6 +1823,12 @@ public final class ToolWindowManagerImpl extends ToolWindowManagerEx implements myCallbackOnActivation = null; if (cmd != null) { requestFocus(cmd, true).notifyWhenDone(callback); + } else { + final Component owner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner(); + final Component old = myFocusedComponentOnDeactivation.get(); + if (owner == null && old != null) { + requestFocus(old, false); + } } } }