mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-08 18:26:01 +02:00
[302873] [dis] Toggling "Show Source" jumps to unexpected location
This commit is contained in:
parent
a16c5bc0d5
commit
ecac1992cc
2 changed files with 31 additions and 118 deletions
|
@ -256,12 +256,11 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem
|
||||||
protected Map<String, Action> fGlobalActions = new HashMap<String, Action>();
|
protected Map<String, Action> fGlobalActions = new HashMap<String, Action>();
|
||||||
private List<Action> fSelectionActions = new ArrayList<Action>();
|
private List<Action> fSelectionActions = new ArrayList<Action>();
|
||||||
private List<AbstractDisassemblyAction> fStateDependentActions = new ArrayList<AbstractDisassemblyAction>();
|
private List<AbstractDisassemblyAction> fStateDependentActions = new ArrayList<AbstractDisassemblyAction>();
|
||||||
private boolean fSourceOnlyMode;
|
|
||||||
private boolean fShowSource;
|
private boolean fShowSource;
|
||||||
private boolean fShowOpcodes;
|
private boolean fShowOpcodes;
|
||||||
private boolean fShowSymbols;
|
private boolean fShowSymbols;
|
||||||
private Map<String, Object> fFile2Storage = new HashMap<String, Object>();
|
private Map<String, Object> fFile2Storage = new HashMap<String, Object>();
|
||||||
private boolean fShowDisassembly;
|
private boolean fShowDisassembly = true;
|
||||||
private LinkedList<AddressRangePosition> fPCHistory = new LinkedList<AddressRangePosition>();
|
private LinkedList<AddressRangePosition> fPCHistory = new LinkedList<AddressRangePosition>();
|
||||||
private int fPCHistorySizeMax = 4;
|
private int fPCHistorySizeMax = 4;
|
||||||
private boolean fGotoFramePending;
|
private boolean fGotoFramePending;
|
||||||
|
@ -351,11 +350,11 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
IPreferenceStore store = DsfUIPlugin.getDefault().getPreferenceStore();
|
IPreferenceStore store = DsfUIPlugin.getDefault().getPreferenceStore();
|
||||||
store.setValue(DisassemblyPreferenceConstants.SHOW_FUNCTION_OFFSETS, !isOpcodeRulerVisible());
|
store.setValue(DisassemblyPreferenceConstants.SHOW_FUNCTION_OFFSETS, !isFunctionOffsetsRulerVisible());
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public void update() {
|
public void update() {
|
||||||
setChecked(isOpcodeRulerVisible());
|
setChecked(isFunctionOffsetsRulerVisible());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -405,12 +404,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
IPreferenceStore store = DsfUIPlugin.getDefault().getPreferenceStore();
|
IPreferenceStore store = DsfUIPlugin.getDefault().getPreferenceStore();
|
||||||
boolean showSourceEnabled = store.getBoolean(DisassemblyPreferenceConstants.SHOW_SOURCE);
|
store.setValue(DisassemblyPreferenceConstants.SHOW_SOURCE, !fShowSource);
|
||||||
if (showSourceEnabled == fShowSource) {
|
|
||||||
store.setValue(DisassemblyPreferenceConstants.SHOW_SOURCE, !fShowSource);
|
|
||||||
} else {
|
|
||||||
sourceModeChanged(!fShowSource);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public void update() {
|
public void update() {
|
||||||
|
@ -472,10 +466,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem
|
||||||
fEndAddress = new BigInteger(endAddressString.substring(2), 16);
|
fEndAddress = new BigInteger(endAddressString.substring(2), 16);
|
||||||
else
|
else
|
||||||
fEndAddress = new BigInteger(endAddressString, 16);
|
fEndAddress = new BigInteger(endAddressString, 16);
|
||||||
// TLETODO [disassembly[ source only mode
|
fShowSource = prefs.getBoolean(DisassemblyPreferenceConstants.SHOW_SOURCE);
|
||||||
fSourceOnlyMode = false; //prefs.getBoolean(DisassemblyPreferenceConstants.USE_SOURCE_ONLY_MODE);
|
|
||||||
fShowSource = fSourceOnlyMode || prefs.getBoolean(DisassemblyPreferenceConstants.SHOW_SOURCE);
|
|
||||||
fShowDisassembly = !fSourceOnlyMode || !fShowSource;
|
|
||||||
fShowOpcodes = prefs.getBoolean(DisassemblyPreferenceConstants.SHOW_FUNCTION_OFFSETS);
|
fShowOpcodes = prefs.getBoolean(DisassemblyPreferenceConstants.SHOW_FUNCTION_OFFSETS);
|
||||||
fShowSymbols = prefs.getBoolean(DisassemblyPreferenceConstants.SHOW_SYMBOLS);
|
fShowSymbols = prefs.getBoolean(DisassemblyPreferenceConstants.SHOW_SYMBOLS);
|
||||||
fUpdateBeforeFocus = !prefs.getBoolean(DisassemblyPreferenceConstants.AVOID_READ_BEFORE_PC);
|
fUpdateBeforeFocus = !prefs.getBoolean(DisassemblyPreferenceConstants.AVOID_READ_BEFORE_PC);
|
||||||
|
@ -566,45 +557,28 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem
|
||||||
showAddressRuler();
|
showAddressRuler();
|
||||||
}
|
}
|
||||||
} else if (property.equals(DisassemblyPreferenceConstants.SHOW_SOURCE)) {
|
} else if (property.equals(DisassemblyPreferenceConstants.SHOW_SOURCE)) {
|
||||||
sourceModeChanged(store.getBoolean(property));
|
boolean showSource = store.getBoolean(property);
|
||||||
} else if (property.equals(DisassemblyPreferenceConstants.INSTRUCTION_RADIX)) {
|
if (fShowSource == showSource) {
|
||||||
Runnable doit = new Runnable() {
|
return;
|
||||||
public void run() {
|
}
|
||||||
fDocument.invalidateAddressRange(fStartAddress, fEndAddress, true);
|
fShowSource = showSource;
|
||||||
if (!fShowDisassembly) {
|
fActionToggleSource.update();
|
||||||
fDocument.invalidateDisassemblyWithSource(true);
|
refreshView(10);
|
||||||
}
|
|
||||||
fDocument.setMaxOpcodeLength(0);
|
|
||||||
fGotoFramePending = true;
|
|
||||||
}};
|
|
||||||
doScrollLocked(doit);
|
|
||||||
} else if (property.equals(DisassemblyPreferenceConstants.SHOW_SYMBOLS)) {
|
} else if (property.equals(DisassemblyPreferenceConstants.SHOW_SYMBOLS)) {
|
||||||
boolean showSymbols = store.getBoolean(property);
|
boolean showSymbols = store.getBoolean(property);
|
||||||
if (fShowSymbols == showSymbols) {
|
if (fShowSymbols == showSymbols) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
fShowSymbols = showSymbols;
|
fShowSymbols = showSymbols;
|
||||||
Runnable doit = new Runnable() {
|
fActionToggleSymbols.update();
|
||||||
public void run() {
|
refreshView(10);
|
||||||
fDocument.invalidateAddressRange(fStartAddress, fEndAddress, true);
|
|
||||||
if (!fShowDisassembly) {
|
|
||||||
fDocument.invalidateDisassemblyWithSource(true);
|
|
||||||
}
|
|
||||||
fGotoFramePending = true;
|
|
||||||
}};
|
|
||||||
doScrollLocked(doit);
|
|
||||||
} else if (property.equals(DisassemblyPreferenceConstants.USE_SOURCE_ONLY_MODE)) {
|
|
||||||
fSourceOnlyMode = store.getBoolean(property);
|
|
||||||
if (fDebugSessionId != null) {
|
|
||||||
disassemblyModeChanged(isDissemblyMixedModeOn());
|
|
||||||
}
|
|
||||||
} else if (property.equals(DisassemblyPreferenceConstants.SHOW_FUNCTION_OFFSETS)) {
|
} else if (property.equals(DisassemblyPreferenceConstants.SHOW_FUNCTION_OFFSETS)) {
|
||||||
fShowOpcodes = store.getBoolean(property);
|
fShowOpcodes = store.getBoolean(property);
|
||||||
fActionToggleFunctionColumn.update();
|
fActionToggleFunctionColumn.update();
|
||||||
if (isOpcodeRulerVisible()) {
|
if (isFunctionOffsetsRulerVisible()) {
|
||||||
showOpcodeRuler();
|
showFunctionOffsetsRuler();
|
||||||
} else {
|
} else {
|
||||||
hideOpcodeRuler();
|
hideFunctionOffsetsRuler();
|
||||||
}
|
}
|
||||||
} else if (property.equals(DisassemblyPreferenceConstants.AVOID_READ_BEFORE_PC)) {
|
} else if (property.equals(DisassemblyPreferenceConstants.AVOID_READ_BEFORE_PC)) {
|
||||||
fUpdateBeforeFocus = !store.getBoolean(property);
|
fUpdateBeforeFocus = !store.getBoolean(property);
|
||||||
|
@ -671,8 +645,8 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem
|
||||||
if (isAddressRulerVisible()) {
|
if (isAddressRulerVisible()) {
|
||||||
showAddressRuler();
|
showAddressRuler();
|
||||||
}
|
}
|
||||||
if (isOpcodeRulerVisible()) {
|
if (isFunctionOffsetsRulerVisible()) {
|
||||||
showOpcodeRuler();
|
showFunctionOffsetsRuler();
|
||||||
}
|
}
|
||||||
initDragAndDrop();
|
initDragAndDrop();
|
||||||
PlatformUI.getWorkbench().getHelpSystem().setHelp(fViewer.getControl(), IDisassemblyHelpContextIds.DISASSEMBLY_VIEW);
|
PlatformUI.getWorkbench().getHelpSystem().setHelp(fViewer.getControl(), IDisassemblyHelpContextIds.DISASSEMBLY_VIEW);
|
||||||
|
@ -986,9 +960,9 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem
|
||||||
*
|
*
|
||||||
* @return the created line number column
|
* @return the created line number column
|
||||||
*/
|
*/
|
||||||
protected IVerticalRulerColumn createOpcodeRulerColumn() {
|
protected IVerticalRulerColumn createFunctionOffsetsRulerColumn() {
|
||||||
fOpcodeRulerColumn= new FunctionOffsetRulerColumn();
|
fOpcodeRulerColumn= new FunctionOffsetRulerColumn();
|
||||||
initializeRulerColumn(fOpcodeRulerColumn, DisassemblyPreferenceConstants.OPCODE_COLOR);
|
initializeRulerColumn(fOpcodeRulerColumn, DisassemblyPreferenceConstants.FUNCTION_OFFSETS_COLOR);
|
||||||
return fOpcodeRulerColumn;
|
return fOpcodeRulerColumn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1071,19 +1045,19 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isOpcodeRulerVisible() {
|
private boolean isFunctionOffsetsRulerVisible() {
|
||||||
return fShowOpcodes;
|
return fShowOpcodes;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Shows the opcode ruler column.
|
* Shows the opcode ruler column.
|
||||||
*/
|
*/
|
||||||
private void showOpcodeRuler() {
|
private void showFunctionOffsetsRuler() {
|
||||||
if (fOpcodeRulerColumn == null) {
|
if (fOpcodeRulerColumn == null) {
|
||||||
IVerticalRuler v= getVerticalRuler();
|
IVerticalRuler v= getVerticalRuler();
|
||||||
if (v instanceof CompositeRuler) {
|
if (v instanceof CompositeRuler) {
|
||||||
CompositeRuler c= (CompositeRuler) v;
|
CompositeRuler c= (CompositeRuler) v;
|
||||||
c.addDecorator(2, createOpcodeRulerColumn());
|
c.addDecorator(2, createFunctionOffsetsRulerColumn());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1091,7 +1065,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem
|
||||||
/**
|
/**
|
||||||
* Hides the opcode ruler column.
|
* Hides the opcode ruler column.
|
||||||
*/
|
*/
|
||||||
private void hideOpcodeRuler() {
|
private void hideFunctionOffsetsRuler() {
|
||||||
if (fOpcodeRulerColumn != null) {
|
if (fOpcodeRulerColumn != null) {
|
||||||
IVerticalRuler v= getVerticalRuler();
|
IVerticalRuler v= getVerticalRuler();
|
||||||
if (v instanceof CompositeRuler) {
|
if (v instanceof CompositeRuler) {
|
||||||
|
@ -2407,7 +2381,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem
|
||||||
public void lockScroller() {
|
public void lockScroller() {
|
||||||
assert isGuiThread();
|
assert isGuiThread();
|
||||||
assert fScrollPos == null;
|
assert fScrollPos == null;
|
||||||
if (isOpcodeRulerVisible()) {
|
if (isFunctionOffsetsRulerVisible()) {
|
||||||
fRedrawControl = fViewer.getControl();
|
fRedrawControl = fViewer.getControl();
|
||||||
} else {
|
} else {
|
||||||
fRedrawControl = fViewer.getTextWidget();
|
fRedrawControl = fViewer.getTextWidget();
|
||||||
|
@ -2597,12 +2571,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isDissemblyMixedModeOn() {
|
/**
|
||||||
// TLETODO [disassembly] mixed mode on/off
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Close this part
|
* Close this part
|
||||||
*/
|
*/
|
||||||
protected abstract void closePart();
|
protected abstract void closePart();
|
||||||
|
@ -2756,54 +2725,6 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem
|
||||||
|
|
||||||
return pos;
|
return pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void disassemblyModeChanged(boolean isDisassemblyOn) {
|
|
||||||
if (fShowDisassembly == isDisassemblyOn) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (fShowDisassembly && !fSourceOnlyMode) {
|
|
||||||
// if not in source-only mode, do not update if disassembly mode is disabled
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
fShowDisassembly = isDisassemblyOn;
|
|
||||||
if (!fShowDisassembly) {
|
|
||||||
sourceModeChanged(true);
|
|
||||||
}
|
|
||||||
fActionToggleSource.update();
|
|
||||||
Runnable doit = new Runnable() {
|
|
||||||
public void run() {
|
|
||||||
fDocument.invalidateDisassemblyWithSource(!fShowDisassembly);
|
|
||||||
fGotoFramePending = true;
|
|
||||||
}};
|
|
||||||
doScrollLocked(doit);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Turn on/off source mode.
|
|
||||||
* @param isSourceModeOn
|
|
||||||
*/
|
|
||||||
private void sourceModeChanged(boolean isSourceModeOn) {
|
|
||||||
if (fShowSource == isSourceModeOn) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
fShowSource = isSourceModeOn;
|
|
||||||
fActionToggleSource.update();
|
|
||||||
fDocument.invalidateSource();
|
|
||||||
if (!fShowSource && !fShowDisassembly) {
|
|
||||||
disassemblyModeChanged(true);
|
|
||||||
} else {
|
|
||||||
fPCAnnotationUpdatePending = true;
|
|
||||||
updateInvalidSource();
|
|
||||||
if (fShowSource) {
|
|
||||||
Runnable doit = new Runnable() {
|
|
||||||
public void run() {
|
|
||||||
fDocument.invalidateAddressRange(fStartAddress, fEndAddress, true);
|
|
||||||
fGotoFramePending = true;
|
|
||||||
}};
|
|
||||||
doScrollLocked(doit);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public AddressBarContributionItem getAddressBar() {
|
public AddressBarContributionItem getAddressBar() {
|
||||||
return fAddressBar;
|
return fAddressBar;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2007, 2008 Wind River Systems and others.
|
* Copyright (c) 2007, 2010 Wind River Systems and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -29,24 +29,20 @@ public class DisassemblyPreferenceConstants {
|
||||||
public static final String END_ADDRESS = "disassembly.endAddress"; //$NON-NLS-1$
|
public static final String END_ADDRESS = "disassembly.endAddress"; //$NON-NLS-1$
|
||||||
public static final String PC_HISTORY_SIZE = "disassembly.pcHistorySize"; //$NON-NLS-1$
|
public static final String PC_HISTORY_SIZE = "disassembly.pcHistorySize"; //$NON-NLS-1$
|
||||||
public static final String SHOW_SOURCE = "disassembly.showSource"; //$NON-NLS-1$
|
public static final String SHOW_SOURCE = "disassembly.showSource"; //$NON-NLS-1$
|
||||||
public static final String SHOW_LABELS = "disassembly.showLabels"; //$NON-NLS-1$
|
|
||||||
public static final String SHOW_SYMBOLS = "disassembly.showSymbols"; //$NON-NLS-1$
|
public static final String SHOW_SYMBOLS = "disassembly.showSymbols"; //$NON-NLS-1$
|
||||||
public static final String SIMPLIFIED = "disassembly.simplified"; //$NON-NLS-1$
|
|
||||||
public static final String INSTRUCTION_RADIX = "disassembly.instructionRadix"; //$NON-NLS-1$
|
|
||||||
public static final String ADDRESS_RADIX = "disassembly.addressRadix"; //$NON-NLS-1$
|
public static final String ADDRESS_RADIX = "disassembly.addressRadix"; //$NON-NLS-1$
|
||||||
public static final String SHOW_ADDRESS_RADIX = "disassembly.showAddressRadix"; //$NON-NLS-1$
|
public static final String SHOW_ADDRESS_RADIX = "disassembly.showAddressRadix"; //$NON-NLS-1$
|
||||||
public static final String SHOW_ADDRESS_RULER = "disassembly.showAddressRuler"; //$NON-NLS-1$
|
public static final String SHOW_ADDRESS_RULER = "disassembly.showAddressRuler"; //$NON-NLS-1$
|
||||||
public static final String ADDRESS_COLOR = "disassembly.addressColor"; //$NON-NLS-1$
|
public static final String ADDRESS_COLOR = "disassembly.addressColor"; //$NON-NLS-1$
|
||||||
public static final String SHOW_FUNCTION_OFFSETS = "disassembly.showFunctionOffsetRuler"; //$NON-NLS-1$
|
public static final String SHOW_FUNCTION_OFFSETS = "disassembly.showFunctionOffsetRuler"; //$NON-NLS-1$
|
||||||
public static final String OPCODE_COLOR = "disassembly.opcodeColor"; //$NON-NLS-1$
|
public static final String FUNCTION_OFFSETS_COLOR = "disassembly.functionOffsetsColor"; //$NON-NLS-1$
|
||||||
public static final String USE_SOURCE_ONLY_MODE = "disassembly.useSourceOnlyMode"; //$NON-NLS-1$
|
|
||||||
public static final String AVOID_READ_BEFORE_PC = "disassembly.avoidReadBeforePC"; //$NON-NLS-1$
|
public static final String AVOID_READ_BEFORE_PC = "disassembly.avoidReadBeforePC"; //$NON-NLS-1$
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private DisassemblyPreferenceConstants() {
|
private DisassemblyPreferenceConstants() {
|
||||||
// not intended to be subclassed or instatiated
|
// not intended to be subclassed or instantiated
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -60,17 +56,13 @@ public class DisassemblyPreferenceConstants {
|
||||||
store.setDefault(PC_HISTORY_SIZE, 4);
|
store.setDefault(PC_HISTORY_SIZE, 4);
|
||||||
store.setDefault(SHOW_SOURCE, true);
|
store.setDefault(SHOW_SOURCE, true);
|
||||||
store.setDefault(SHOW_FUNCTION_OFFSETS, false);
|
store.setDefault(SHOW_FUNCTION_OFFSETS, false);
|
||||||
store.setDefault(SHOW_LABELS, true);
|
|
||||||
store.setDefault(SHOW_SYMBOLS, true);
|
store.setDefault(SHOW_SYMBOLS, true);
|
||||||
store.setDefault(SIMPLIFIED, true);
|
|
||||||
store.setDefault(INSTRUCTION_RADIX, 16);
|
|
||||||
store.setDefault(ADDRESS_RADIX, 16);
|
store.setDefault(ADDRESS_RADIX, 16);
|
||||||
store.setDefault(SHOW_ADDRESS_RADIX, false);
|
store.setDefault(SHOW_ADDRESS_RADIX, false);
|
||||||
store.setDefault(SHOW_ADDRESS_RULER, true);
|
store.setDefault(SHOW_ADDRESS_RULER, true);
|
||||||
store.setDefault(AVOID_READ_BEFORE_PC, false);
|
store.setDefault(AVOID_READ_BEFORE_PC, false);
|
||||||
store.setDefault(USE_SOURCE_ONLY_MODE, false);
|
|
||||||
PreferenceConverter.setDefault(store, ADDRESS_COLOR, new RGB(0, 96, 0));
|
PreferenceConverter.setDefault(store, ADDRESS_COLOR, new RGB(0, 96, 0));
|
||||||
PreferenceConverter.setDefault(store, OPCODE_COLOR, new RGB(96, 0, 0));
|
PreferenceConverter.setDefault(store, FUNCTION_OFFSETS_COLOR, new RGB(96, 0, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Initializer extends AbstractPreferenceInitializer {
|
public static class Initializer extends AbstractPreferenceInitializer {
|
||||||
|
|
Loading…
Add table
Reference in a new issue