diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebugView.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebugView.java index b92069b6dea7..3e0433b804af 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebugView.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebugView.java @@ -20,7 +20,7 @@ import com.intellij.ide.DataManager; import com.intellij.openapi.Disposable; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.ui.content.ContentManager; -import com.intellij.util.SingleAlarm; +import com.intellij.util.Alarm; import com.intellij.xdebugger.XDebugSession; import com.intellij.xdebugger.impl.ui.XDebugSessionTab; import org.jetbrains.annotations.NotNull; @@ -35,29 +35,26 @@ import java.util.EventObject; public abstract class XDebugView implements Disposable { public enum SessionEvent {PAUSED, BEFORE_RESUME, RESUMED, STOPPED, FRAME_CHANGED, SETTINGS_CHANGED} - private final SingleAlarm myClearAlarm; - private static final int VIEW_CLEAR_DELAY = 100; //ms + private final Alarm myUpdateAlarm; + private static final int VIEW_UPDATE_DELAY = 100; //ms public XDebugView() { - myClearAlarm = new SingleAlarm(new Runnable() { - @Override - public void run() { - clear(); - } - }, VIEW_CLEAR_DELAY, this); - } - - protected final void requestClear() { - myClearAlarm.cancelAndRequest(); - } - - protected final void cancelClear() { - myClearAlarm.cancel(); + myUpdateAlarm = new Alarm(this); } protected abstract void clear(); - public abstract void processSessionEvent(@NotNull SessionEvent event); + public void onSessionEvent(@NotNull final SessionEvent event) { + myUpdateAlarm.cancelAllRequests(); + myUpdateAlarm.addRequest(new Runnable() { + @Override + public void run() { + processSessionEvent(event); + } + }, VIEW_UPDATE_DELAY); + } + + protected abstract void processSessionEvent(@NotNull SessionEvent event); @Nullable protected static XDebugSession getSession(@NotNull EventObject e) { diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebugViewSessionListener.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebugViewSessionListener.java index d790113b1816..2e21ed0f2248 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebugViewSessionListener.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebugViewSessionListener.java @@ -36,7 +36,7 @@ public class XDebugViewSessionListener extends XDebugSessionAdapter { AppUIUtil.invokeLaterIfProjectAlive(session.getProject(), new Runnable() { @Override public void run() { - myDebugView.processSessionEvent(event); + myDebugView.onSessionEvent(event); } }); } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XFramesView.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XFramesView.java index b98440b5d69f..6ab8acd1152e 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XFramesView.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XFramesView.java @@ -221,13 +221,11 @@ public class XFramesView extends XDebugView { mySelectedStack = null; XSuspendContext suspendContext = session == null ? null : session.getSuspendContext(); if (suspendContext == null) { - requestClear(); + clear(); return; } if (event == SessionEvent.PAUSED) { - // clear immediately - cancelClear(); clear(); } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XVariablesView.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XVariablesView.java index df43b1147419..c1232b572433 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XVariablesView.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XVariablesView.java @@ -57,11 +57,10 @@ public class XVariablesView extends XVariablesViewBase { tree.markNodesObsolete(); if (stackFrame != null) { - cancelClear(); buildTreeAndRestoreState(stackFrame); } else { - requestClear(); + clear(); } } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XWatchesViewImpl.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XWatchesViewImpl.java index c510cd17c90a..b8d088d79231 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XWatchesViewImpl.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XWatchesViewImpl.java @@ -275,7 +275,6 @@ public class XWatchesViewImpl extends XDebugView implements DnDNativeTarget, XWa XDebugSession session = getSession(getMainPanel()); XStackFrame stackFrame = session == null ? null : session.getCurrentStackFrame(); if (stackFrame != null) { - cancelClear(); tree.setSourcePosition(stackFrame.getSourcePosition()); myRootNode.updateWatches(stackFrame.getEvaluator()); if (myTreeState != null) { @@ -283,7 +282,7 @@ public class XWatchesViewImpl extends XDebugView implements DnDNativeTarget, XWa } } else { - requestClear(); + clear(); } } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebugSessionTab.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebugSessionTab.java index 0fd33b5f0a2d..7f46d0483e2c 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebugSessionTab.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebugSessionTab.java @@ -198,7 +198,7 @@ public class XDebugSessionTab extends DebuggerSessionTabBase { @Override public void run() { for (XDebugView view : myViews) { - view.processSessionEvent(XDebugView.SessionEvent.SETTINGS_CHANGED); + view.onSessionEvent(XDebugView.SessionEvent.SETTINGS_CHANGED); } } });