Merge remote-tracking branch

'origin/GP-4297_fix_screen_reader_duplicate_line_reading--SQUASHED' into
patch (Closes #6177)
This commit is contained in:
Ryan Kurtz 2024-02-07 11:06:25 -05:00
commit 19812a1ecb
3 changed files with 19 additions and 11 deletions

View File

@ -18,6 +18,7 @@ package ghidra.app.util.viewer.field;
import docking.widgets.fieldpanel.FieldDescriptionProvider;
import docking.widgets.fieldpanel.field.Field;
import docking.widgets.fieldpanel.support.FieldLocation;
import ghidra.program.model.address.Address;
import ghidra.program.util.ProgramLocation;
public class ListingFieldDescriptionProvider implements FieldDescriptionProvider {
@ -27,8 +28,9 @@ public class ListingFieldDescriptionProvider implements FieldDescriptionProvider
if (field instanceof ListingField listingField) {
FieldFactory fieldFactory = listingField.getFieldFactory();
ProgramLocation location = fieldFactory.getProgramLocation(0, 0, listingField);
return fieldFactory.getFieldName() + " Field at Address " + location.getAddress() +
" text = " + field.getText();
Address address = location.getAddress();
String addressString = address.toString(address.getAddressSpace().showSpaceName(), 1);
return fieldFactory.getFieldName() + " Field at Address " + addressString;
}
return "Unknown Field";
}

View File

@ -102,13 +102,22 @@ public class ByteViewerComponent extends FieldPanel implements FieldMouseListene
ByteBlockInfo info = indexMap.getBlockInfo(fieldLoc.getIndex(), fieldLoc.getFieldNum());
if (info != null) {
String modelName = model.getName();
return modelName + " format at " +
info.getBlock().getLocationRepresentation(info.getOffset()) + ", value = " +
field.getText();
String location = getAccessibleLocationInfo(info.getBlock(), info.getOffset());
return modelName + " format at " + location;
}
return null;
}
private String getAccessibleLocationInfo(ByteBlock block, BigInteger offset) {
if (block instanceof MemoryByteBlock memBlock) {
// location represents an address, remove leading zeros to make screen reading concise
Address address = memBlock.getAddress(offset);
return address.toString(address.getAddressSpace().showSpaceName(), 1);
}
// otherwise use generic location representation
return block.getLocationRepresentation(offset);
}
@Override
public void buttonPressed(FieldLocation fieldLocation, Field field, MouseEvent mouseEvent) {
if (fieldLocation == null || field == null) {

View File

@ -16,9 +16,7 @@
package ghidra.app.decompiler.component;
import java.awt.*;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.MouseEvent;
import java.awt.event.*;
import java.math.BigInteger;
import java.util.*;
import java.util.List;
@ -45,7 +43,6 @@ import ghidra.app.decompiler.component.hover.DecompilerHoverService;
import ghidra.app.decompiler.component.margin.*;
import ghidra.app.plugin.core.decompile.DecompilerClipboardProvider;
import ghidra.app.plugin.core.decompile.actions.FieldBasedSearchLocation;
import ghidra.app.util.viewer.listingpanel.MarginProvider;
import ghidra.app.util.viewer.util.ScrollpaneAlignedHorizontalLayout;
import ghidra.program.model.address.*;
import ghidra.program.model.listing.Function;
@ -128,7 +125,7 @@ public class DecompilerPanel extends JPanel implements FieldMouseListener, Field
fieldPanel.addFieldMouseListener(this);
fieldPanel.addFieldLocationListener(this);
fieldPanel.addLayoutListener(this);
fieldPanel.addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
@ -1317,7 +1314,7 @@ public class DecompilerPanel extends JPanel implements FieldMouseListener, Field
if (f == null) {
return null;
}
return "line " + (l.getIndex().intValue() + 1) + ", " + f.getText();
return "line " + (l.getIndex().intValue() + 1);
});
}