diff --git a/platform/platform-impl/src/com/intellij/ide/FrameStateManagerImpl.java b/platform/platform-impl/src/com/intellij/ide/FrameStateManagerImpl.java index 1a9bf874a34e..c3171f3e81bc 100644 --- a/platform/platform-impl/src/com/intellij/ide/FrameStateManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/ide/FrameStateManagerImpl.java @@ -16,32 +16,41 @@ import java.util.List; public class FrameStateManagerImpl extends FrameStateManager { private final List myListeners = ContainerUtil.createLockFreeCopyOnWriteList(); - private final BusyObject.Impl myActive; + private final BusyObject.Impl myActive = new BusyObject.Impl() { + @Override + public boolean isReady() { + return ApplicationManager.getApplication().isActive(); + } + }; public FrameStateManagerImpl() { - myActive = new BusyObject.Impl() { - @Override - public boolean isReady() { - return ApplicationManager.getApplication().isActive(); - } - }; + ApplicationManager.getApplication().getMessageBus().connect() + .subscribe(ApplicationActivationListener.TOPIC, new ApplicationActivationListener() { + private final FrameStateListener myPublisher = ApplicationManager.getApplication().getMessageBus().syncPublisher(FrameStateListener.TOPIC); - ApplicationManager.getApplication().getMessageBus().connect().subscribe(ApplicationActivationListener.TOPIC, new ApplicationActivationListener() { - @Override - public void applicationActivated(@NotNull IdeFrame ideFrame) { - System.setProperty("com.jetbrains.suppressWindowRaise", "false"); - myActive.onReady(); - fireActivationEvent(); - } - - @Override - public void applicationDeactivated(@NotNull IdeFrame ideFrame) { - System.setProperty("com.jetbrains.suppressWindowRaise", "true"); - if (!ApplicationManager.getApplication().isDisposed()) { - fireDeactivationEvent(); + @Override + public void applicationActivated(@NotNull IdeFrame ideFrame) { + System.setProperty("com.jetbrains.suppressWindowRaise", "false"); + myActive.onReady(); + myPublisher.onFrameActivated(); + for (FrameStateListener listener : myListeners) { + listener.onFrameActivated(); + } } - } - }); + + @Override + public void applicationDeactivated(@NotNull IdeFrame ideFrame) { + System.setProperty("com.jetbrains.suppressWindowRaise", "true"); + if (ApplicationManager.getApplication().isDisposed()) { + return; + } + + myPublisher.onFrameDeactivated(); + for (FrameStateListener listener : myListeners) { + listener.onFrameDeactivated(); + } + } + }); } @Override @@ -49,18 +58,6 @@ public class FrameStateManagerImpl extends FrameStateManager { return myActive.getReady(this); } - private void fireDeactivationEvent() { - for (FrameStateListener listener : myListeners) { - listener.onFrameDeactivated(); - } - } - - private void fireActivationEvent() { - for (FrameStateListener listener : myListeners) { - listener.onFrameActivated(); - } - } - @Override public void addListener(@NotNull FrameStateListener listener) { myListeners.add(listener); @@ -68,11 +65,11 @@ public class FrameStateManagerImpl extends FrameStateManager { @Override public void addListener(@NotNull final FrameStateListener listener, @Nullable Disposable disposable) { - if (disposable != null) { - ApplicationManager.getApplication().getMessageBus().connect(disposable).subscribe(FrameStateListener.TOPIC, listener); + if (disposable == null) { + myListeners.add(listener); } else { - myListeners.add(listener); + ApplicationManager.getApplication().getMessageBus().connect(disposable).subscribe(FrameStateListener.TOPIC, listener); } }