summaryrefslogtreecommitdiff
path: root/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XFramesView.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XFramesView.java')
-rw-r--r--platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XFramesView.java43
1 files changed, 22 insertions, 21 deletions
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..9999ac015b77 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
@@ -188,10 +188,10 @@ public class XFramesView extends XDebugView {
return toolbar;
}
- private StackFramesListBuilder getOrCreateBuilder(XExecutionStack executionStack) {
+ private StackFramesListBuilder getOrCreateBuilder(XExecutionStack executionStack, XDebugSession session) {
StackFramesListBuilder builder = myBuilders.get(executionStack);
if (builder == null) {
- builder = new StackFramesListBuilder(executionStack);
+ builder = new StackFramesListBuilder(executionStack, session);
myBuilders.put(executionStack, builder);
}
return builder;
@@ -244,7 +244,6 @@ public class XFramesView extends XDebugView {
}
myToolbar.setAddSeparatorFirst(!invisible);
updateFrames(activeExecutionStack, session);
- myListenersEnabled = true;
}
@Override
@@ -270,19 +269,14 @@ public class XFramesView extends XDebugView {
return;
}
if (mySelectedStack != null) {
- getOrCreateBuilder(mySelectedStack).stop();
+ getOrCreateBuilder(mySelectedStack, session).stop();
}
mySelectedStack = executionStack;
if (executionStack != null) {
- StackFramesListBuilder builder = getOrCreateBuilder(executionStack);
+ StackFramesListBuilder builder = getOrCreateBuilder(executionStack, session);
builder.initModel(myFramesList.getModel());
builder.start();
- XStackFrame topFrame = executionStack.getTopFrame();
- if (topFrame != null) {
- myFramesList.setSelectedValue(topFrame, true);
- session.setCurrentStackFrame(executionStack, topFrame);
- }
}
}
@@ -303,7 +297,7 @@ public class XFramesView extends XDebugView {
if (selected instanceof XStackFrame) {
XDebugSession session = getSession(e);
if (session != null) {
- session.setCurrentStackFrame(mySelectedStack, (XStackFrame)selected);
+ session.setCurrentStackFrame(mySelectedStack, (XStackFrame)selected, myFramesList.getSelectedIndex() == 0);
}
}
}
@@ -312,21 +306,15 @@ public class XFramesView extends XDebugView {
private XExecutionStack myExecutionStack;
private final List<XStackFrame> myStackFrames;
private String myErrorMessage;
- private int myNextFrameIndex;
+ private int myNextFrameIndex = 0;
private boolean myRunning;
private boolean myAllFramesLoaded;
+ private final XDebugSession mySession;
- private StackFramesListBuilder(final XExecutionStack executionStack) {
+ private StackFramesListBuilder(final XExecutionStack executionStack, XDebugSession session) {
myExecutionStack = executionStack;
+ mySession = session;
myStackFrames = new ArrayList<XStackFrame>();
- XStackFrame topFrame = executionStack.getTopFrame();
- if (topFrame != null) {
- myStackFrames.add(topFrame);
- myNextFrameIndex = 1;
- }
- else {
- myNextFrameIndex = 0;
- }
}
@Override
@@ -336,6 +324,9 @@ public class XFramesView extends XDebugView {
public void run() {
myStackFrames.addAll(stackFrames);
addFrameListElements(stackFrames, last);
+ if (myNextFrameIndex == 0) {
+ selectTopFrame();
+ }
myNextFrameIndex += stackFrames.size();
myAllFramesLoaded = last;
if (last) {
@@ -399,6 +390,15 @@ public class XFramesView extends XDebugView {
myRunning = false;
}
+ private void selectTopFrame() {
+ if (!myStackFrames.isEmpty() && mySelectedStack != null) {
+ XStackFrame topFrame = myStackFrames.get(0);
+ myFramesList.setSelectedValue(topFrame, true);
+ mySession.setCurrentStackFrame(mySelectedStack, topFrame, true);
+ myListenersEnabled = true;
+ }
+ }
+
@SuppressWarnings("unchecked")
public void initModel(final DefaultListModel model) {
model.removeAllElements();
@@ -411,6 +411,7 @@ public class XFramesView extends XDebugView {
else if (!myAllFramesLoaded) {
model.addElement(null);
}
+ selectTopFrame();
}
}
}