1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

[302875] [dis] Toggling "Show Symbols" resets viewport

[304110]  [Disassembly] Refresh button should not jump to PC address
This commit is contained in:
Anton Leherbauer 2010-03-01 14:07:52 +00:00
parent ecac1992cc
commit 74a81d3e32

View file

@ -1865,13 +1865,25 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem
long now = System.currentTimeMillis(); long now = System.currentTimeMillis();
if (now >= refreshViewScheduled) { if (now >= refreshViewScheduled) {
if (DEBUG) System.err.println("*** refreshing view ***"); //$NON-NLS-1$ if (DEBUG) System.err.println("*** refreshing view ***"); //$NON-NLS-1$
fFocusAddress = PC_UNKNOWN;
// save viewport position and frame info
BigInteger topAddress = getTopAddress();
int targetFrame= fTargetFrame; int targetFrame= fTargetFrame;
BigInteger frameAddress = fFrameAddress;
BigInteger pcAddress = fPCAddress;
// clear viewer
resetViewer(); resetViewer();
if (fScrollPos != null) { if (fScrollPos != null) {
fScrollPos.isDeleted = true; fScrollPos.isDeleted = true;
} }
gotoFrameIfActive(targetFrame);
// restore frame info and viewport
fPCAnnotationUpdatePending = true;
fTargetFrame = targetFrame;
fFrameAddress = frameAddress;
fPCAddress = pcAddress;
gotoAddress(topAddress);
} else { } else {
refreshView((int)(refreshViewScheduled - now)); refreshView((int)(refreshViewScheduled - now));
} }
@ -1886,6 +1898,14 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem
} }
} }
private BigInteger getTopAddress() {
BigInteger topAddress = getAddressOfLine(fViewer.getTopIndex());
if (topAddress.equals(fStartAddress)) {
topAddress = getAddressOfLine(fViewer.getTopIndex() + 1);
}
return topAddress;
}
private void resetViewer() { private void resetViewer() {
// clear all state and cache // clear all state and cache
fPCAnnotationUpdatePending = false; fPCAnnotationUpdatePending = false;