diff --git a/platform/platform-api/src/com/intellij/ide/FrameStateManager.java b/platform/platform-api/src/com/intellij/ide/FrameStateManager.java index 1626d768ff7d..cf7145b9157e 100644 --- a/platform/platform-api/src/com/intellij/ide/FrameStateManager.java +++ b/platform/platform-api/src/com/intellij/ide/FrameStateManager.java @@ -15,8 +15,11 @@ */ package com.intellij.ide; +import com.intellij.openapi.Disposable; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.util.ActionCallback; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * Manager of listeners for notifications about activation and deactivation of the @@ -40,14 +43,15 @@ public abstract class FrameStateManager { * * @param listener the listener instance. */ - public abstract void addListener(FrameStateListener listener); + public abstract void addListener(@NotNull FrameStateListener listener); + public abstract void addListener(@NotNull FrameStateListener listener, @Nullable Disposable disposable); /** * Removes a listener which is called when the IDEA window is activated or deactivated. * * @param listener the listener instance. */ - public abstract void removeListener(FrameStateListener listener); + public abstract void removeListener(@NotNull FrameStateListener listener); /** diff --git a/platform/platform-impl/src/com/intellij/ide/FileChangedNotificationProvider.java b/platform/platform-impl/src/com/intellij/ide/FileChangedNotificationProvider.java index 0bfcfeccdd37..c01bb3720c78 100644 --- a/platform/platform-impl/src/com/intellij/ide/FileChangedNotificationProvider.java +++ b/platform/platform-impl/src/com/intellij/ide/FileChangedNotificationProvider.java @@ -47,7 +47,7 @@ public class FileChangedNotificationProvider extends EditorNotifications.Provide } } } - }); + }, project); } @Override diff --git a/platform/platform-impl/src/com/intellij/ide/FrameStateManagerImpl.java b/platform/platform-impl/src/com/intellij/ide/FrameStateManagerImpl.java index 7326ebc1a809..5e45bc27bc32 100644 --- a/platform/platform-impl/src/com/intellij/ide/FrameStateManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/ide/FrameStateManagerImpl.java @@ -15,16 +15,19 @@ */ package com.intellij.ide; +import com.intellij.openapi.Disposable; import com.intellij.openapi.application.ApplicationActivationListener; import com.intellij.openapi.application.impl.ApplicationImpl; import com.intellij.openapi.components.ApplicationComponent; import com.intellij.openapi.util.ActionCallback; import com.intellij.openapi.util.BusyObject; +import com.intellij.openapi.util.Disposer; import com.intellij.openapi.wm.IdeFrame; import com.intellij.util.Alarm; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.List; @@ -105,11 +108,21 @@ public class FrameStateManagerImpl extends FrameStateManager implements Applicat } } - public synchronized void addListener(FrameStateListener listener) { - myListeners.add(listener); + public synchronized void addListener(@NotNull FrameStateListener listener) { + addListener(listener, null); } - public synchronized void removeListener(FrameStateListener listener) { + public synchronized void addListener(@NotNull final FrameStateListener listener, @Nullable Disposable disposable) { + myListeners.add(listener); + if (disposable != null) Disposer.register(disposable, new Disposable() { + @Override + public void dispose() { + removeListener(listener); + } + }); + } + + public synchronized void removeListener(@NotNull FrameStateListener listener) { myListeners.remove(listener); } }