From 1cf30fe308f860176b6afc65a5bfa54dc2d3aa71 Mon Sep 17 00:00:00 2001 From: Kirill Kalishev Date: Sat, 6 Feb 2010 11:28:56 +0300 Subject: [PATCH] focus stealing issue: isActive() is more accurate + removed direct call to requestFocus() from project view --- .../com/intellij/ide/projectView/impl/ProjectViewImpl.java | 3 ++- .../intellij/openapi/application/impl/ApplicationImpl.java | 13 ++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewImpl.java b/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewImpl.java index 13d055d66a..6010b0e857 100644 --- a/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewImpl.java +++ b/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewImpl.java @@ -63,6 +63,7 @@ import com.intellij.openapi.vfs.JarFileSystem; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.openapi.wm.IdeFocusManager; import com.intellij.openapi.wm.ToolWindow; import com.intellij.openapi.wm.ToolWindowId; import com.intellij.openapi.wm.ToolWindowManager; @@ -405,7 +406,7 @@ public final class ProjectViewImpl extends ProjectView implements PersistentStat newPane.setTreeChangeListener(myTreeChangeListener); myAutoScrollToSourceHandler.install(newPane.myTree); - newPane.getComponentToFocus().requestFocus(); + IdeFocusManager.getInstance(myProject).requestFocus(newPane.getComponentToFocus(), false); updateToolWindowTitle(); newPane.restoreExpandedPaths(); diff --git a/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java b/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java index 5defc2f461..910dfab558 100644 --- a/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java @@ -139,7 +139,7 @@ public class ApplicationImpl extends ComponentManagerImpl implements Application private boolean myIsFiringLoadingEvent = false; @NonNls private static final String WAS_EVER_SHOWN = "was.ever.shown"; - private boolean myActive = true; + private Boolean myActive; protected void boostrapPicoContainer() { super.boostrapPicoContainer(); @@ -911,8 +911,8 @@ public class ApplicationImpl extends ComponentManagerImpl implements Application if (frame instanceof IdeFrame) { final IdeFrame ideFrame = (IdeFrame)frame; - if (myActive != active) { - myActive = active; + if (isActive() != active) { + myActive = Boolean.valueOf(active); System.setProperty("idea.active", Boolean.valueOf(myActive).toString()); if (active) { myDispatcher.getMulticaster().applicationActivated(ideFrame); @@ -928,6 +928,13 @@ public class ApplicationImpl extends ComponentManagerImpl implements Application } public boolean isActive() { + if (isUnitTestMode()) return true; + + if (myActive == null) { + Window active = KeyboardFocusManager.getCurrentKeyboardFocusManager().getActiveWindow(); + return active != null; + } + return myActive; } -- 2.11.4.GIT