getApplicationReady() in FrameStateManager

This commit is contained in:
Kirill Kalishev
2010-11-12 19:01:55 +03:00
parent e17c0a5bb4
commit 8e0dff312b
3 changed files with 28 additions and 0 deletions
@@ -16,6 +16,7 @@
package com.intellij.ide;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.util.ActionCallback;
/**
* Manager of listeners for notifications about activation and deactivation of the
@@ -47,4 +48,10 @@ public abstract class FrameStateManager {
* @param listener the listener instance.
*/
public abstract void removeListener(FrameStateListener listener);
/**
* @return action callback for application's active state
*/
public abstract ActionCallback getApplicationActive();
}
@@ -30,6 +30,8 @@ public interface BusyObject {
protected abstract boolean isReady();
public final void onReady() {
if (!isReady()) return;
ActionCallback[] ready = getReadyCallbacks(true);
for (ActionCallback each : ready) {
if (each != null) {
@@ -18,6 +18,8 @@ package com.intellij.ide;
import com.intellij.openapi.application.ApplicationAdapter;
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.wm.IdeFrame;
import com.intellij.util.Alarm;
import com.intellij.util.containers.ContainerUtil;
@@ -33,7 +35,18 @@ public class FrameStateManagerImpl extends FrameStateManager implements Applicat
private boolean myShouldSynchronize;
private final Alarm mySyncAlarm;
private BusyObject.Impl myActive;
private ApplicationImpl myApp;
public FrameStateManagerImpl(final ApplicationImpl app) {
myApp = app;
myActive = new BusyObject.Impl() {
@Override
protected boolean isReady() {
return myApp.isActive();
}
};
myShouldSynchronize = false;
mySyncAlarm = new Alarm();
@@ -41,6 +54,7 @@ public class FrameStateManagerImpl extends FrameStateManager implements Applicat
app.addApplicationListener(new ApplicationAdapter() {
@Override
public void applicationActivated(IdeFrame ideFrame) {
myActive.onReady();
mySyncAlarm.cancelAllRequests();
if (myShouldSynchronize) {
myShouldSynchronize = false;
@@ -64,6 +78,11 @@ public class FrameStateManagerImpl extends FrameStateManager implements Applicat
}
@Override
public ActionCallback getApplicationActive() {
return myActive.getReady(this);
}
@NotNull
@NonNls
public String getComponentName() {