From becae48409baedb4bb49e5c807a9a7a599e5a0e6 Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Mon, 14 Aug 2017 15:49:05 +0300 Subject: [PATCH] prefer user current selection over the remembered one --- .../intellij/xdebugger/impl/frame/XFramesView.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 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 7204fe2c0a97..e685f1fc5ff1 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 @@ -298,8 +298,8 @@ public class XFramesView extends XDebugView { StackFramesListBuilder builder = getOrCreateBuilder(executionStack, session); builder.setToSelect(frameToSelect != null ? frameToSelect : mySelectedFrameIndex); myListenersEnabled = false; - builder.initModel(myFramesList.getModel()); - myListenersEnabled = !builder.start(); + boolean selected = builder.initModel(myFramesList.getModel()); + myListenersEnabled = !builder.start() || selected; } } @@ -314,6 +314,7 @@ public class XFramesView extends XDebugView { private void processFrameSelection(XDebugSession session, boolean force) { mySelectedFrameIndex = myFramesList.getSelectedIndex(); myExecutionStacksWithSelection.put(mySelectedStack, mySelectedFrameIndex); + getOrCreateBuilder(mySelectedStack, session).setToSelect(null); Object selected = myFramesList.getSelectedValue(); if (selected instanceof XStackFrame) { @@ -439,12 +440,13 @@ public class XFramesView extends XDebugView { myRunning = false; } - private void selectCurrentFrame() { + private boolean selectCurrentFrame() { if (myToSelect instanceof XStackFrame) { if (!Objects.equals(myFramesList.getSelectedValue(), myToSelect) && myFramesList.getModel().contains(myToSelect)) { myFramesList.setSelectedValue(myToSelect, true); processFrameSelection(mySession, false); myListenersEnabled = true; + return true; } if (myAllFramesLoaded && myFramesList.getSelectedValue() == null) { LOG.error("Frame was not found, " + myToSelect.getClass() + " must correctly override equals"); @@ -458,12 +460,14 @@ public class XFramesView extends XDebugView { myFramesList.setSelectedIndex(selectedFrameIndex); processFrameSelection(mySession, false); myListenersEnabled = true; + return true; } } + return false; } @SuppressWarnings("unchecked") - public void initModel(final DefaultListModel model) { + public boolean initModel(final DefaultListModel model) { model.removeAllElements(); myStackFrames.forEach(model::addElement); if (myErrorMessage != null) { @@ -472,7 +476,7 @@ public class XFramesView extends XDebugView { else if (!myAllFramesLoaded) { model.addElement(null); } - selectCurrentFrame(); + return selectCurrentFrame(); } } }