Skip to content

Commit 43900e3

Browse files
author
Jeanette Winzenburg
committedJul 20, 2021
8188027: List/TableCell: must not fire event in startEdit if already editing
Reviewed-by: aghaisas
1 parent 1814991 commit 43900e3

File tree

4 files changed

+35
-0
lines changed

4 files changed

+35
-0
lines changed
 

‎modules/javafx.controls/src/main/java/javafx/scene/control/ListCell.java

+1
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,7 @@ public void changed(
357357

358358
/** {@inheritDoc} */
359359
@Override public void startEdit() {
360+
if (isEditing()) return;
360361
final ListView<T> list = getListView();
361362
if (!isEditable() || (list != null && ! list.isEditable())) {
362363
return;

‎modules/javafx.controls/src/main/java/javafx/scene/control/TableCell.java

+1
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,7 @@ private ReadOnlyObjectWrapper<TableView<S>> tableViewPropertyImpl() {
304304

305305
/** {@inheritDoc} */
306306
@Override public void startEdit() {
307+
if (isEditing()) return;
307308
final TableView<S> table = getTableView();
308309
final TableColumn<S,T> column = getTableColumn();
309310
final TableRow<S> row = getTableRow();

‎modules/javafx.controls/src/test/java/test/javafx/scene/control/ListCellTest.java

+11
Original file line numberDiff line numberDiff line change
@@ -672,6 +672,17 @@ protected void assertInRangeState(int index) {
672672
assertTrue(called[0]);
673673
}
674674

675+
@Test public void editCellDoesNotFireEventWhileAlreadyEditing() {
676+
list.setEditable(true);
677+
cell.updateListView(list);
678+
cell.updateIndex(2);
679+
cell.startEdit();
680+
List<EditEvent<?>> events = new ArrayList<>();
681+
list.setOnEditStart(events::add);
682+
cell.startEdit();
683+
assertEquals("startEdit must not fire event while editing", 0, events.size());
684+
}
685+
675686
// commitEdit()
676687
@Test public void commitWhenListIsNullIsOK() {
677688
cell.updateIndex(1);

‎modules/javafx.controls/src/test/java/test/javafx/scene/control/TableCellTest.java

+22
Original file line numberDiff line numberDiff line change
@@ -529,6 +529,28 @@ public void testEditCancelMemoryLeakAfterRemoveEditingItem() {
529529
assertEquals("item must be gc'ed", null, itemRef.get());
530530
}
531531

532+
@Test
533+
public void testEditStartFiresEvent() {
534+
setupForEditing();
535+
cell.updateIndex(1);
536+
List<CellEditEvent<?, ?>> events = new ArrayList<>();
537+
editingColumn.setOnEditStart(events::add);
538+
cell.startEdit();
539+
assertEquals("startEdit must fire", 1, events.size());
540+
}
541+
542+
@Test
543+
public void testEditStartDoesNotFireEventWhileEditing() {
544+
setupForEditing();
545+
cell.updateIndex(1);
546+
cell.startEdit();
547+
List<CellEditEvent<?, ?>> events = new ArrayList<>();
548+
editingColumn.setOnEditStart(events::add);
549+
cell.startEdit();
550+
assertEquals("startEdit must not fire while editing", 0, events.size());
551+
}
552+
553+
532554
/**
533555
* Test that cell.cancelEdit can switch table editing off
534556
* even if a subclass violates its contract.

0 commit comments

Comments
 (0)