diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java b/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java
index 1931138b4c..841902e701 100644
|
a
|
b
|
implements TableModelListener, DataSelectionListener, DataSetListener, OsmPrimit
|
| 444 | 444 | |
| 445 | 445 | void addMembersAtIndexKeepingOldSelection(final Iterable<RelationMember> newMembers, final int index) { |
| 446 | 446 | int idx = index; |
| | 447 | // Avoid having the inserted rows from being part of the selection. See JOSM #21889. |
| | 448 | int[] originalSelection = null; |
| | 449 | if (selectedIndices().anyMatch(selectedRow -> selectedRow == index)) { |
| | 450 | originalSelection = selectedIndices().toArray(); |
| | 451 | } |
| 447 | 452 | for (RelationMember member : newMembers) { |
| 448 | 453 | members.add(idx++, member); |
| 449 | 454 | } |
| 450 | 455 | invalidateConnectionType(); |
| 451 | 456 | fireTableRowsInserted(index, idx - 1); |
| | 457 | if (originalSelection != null) { |
| | 458 | final DefaultListSelectionModel model = this.getSelectionModel(); |
| | 459 | model.setValueIsAdjusting(true); |
| | 460 | model.clearSelection(); |
| | 461 | for (int row : originalSelection) { |
| | 462 | if (row < index) { |
| | 463 | model.addSelectionInterval(row, row); |
| | 464 | } else { |
| | 465 | model.addSelectionInterval(row + idx - index, row + idx - index); |
| | 466 | } |
| | 467 | } |
| | 468 | model.setValueIsAdjusting(false); |
| | 469 | } |
| 452 | 470 | } |
| 453 | 471 | |
| 454 | 472 | public void addMembersAtBeginning(List<? extends OsmPrimitive> primitives) { |