When the current editor value of a `ComboBox` is added to its items list, the 
editor value may be changed to an entirely unrelated item in the list. However, 
our expectation would be that the editor reflects the newly added item instead.

Under normal circumstances, adding items to the list in front of the current 
item causes `selectedIndex` to be shifted by the number of items added, keeping 
the editor value in sync with the currently selected item.

Let's illustrate this with an example:
`items = [foo, bar, baz]`, `selectedIndex = 0`, `selectedItem = foo`

The user changes the editor value to `qux` and inserts the value at list 
position 0, causing the current index to be shifted to the right (in 
`ComboBoxSelectionModel::itemsContentObserver`):
`items = [qux, foo, bar, baz]`, `selectedIndex = 1`, `selectedItem = foo`

The index is shifted a second time in 
`ListViewBitSetSelectionModel::updateSelection`:
`items = [qux, foo, bar, baz]`, `selectedIndex = 2`, `selectedItem = bar`

Now `bar` is selected and shown in the editor, but we would expect `qux` 
instead. The fix is to detect that we're inserting the current editor value in 
`ComboBoxSelectionModel::itemsContentObserver`, and select the correct item 
directly. We also need to account for this situation in 
`ListViewBitSetSelectionModel`, where we check whether the current value is 
already contained in the added values.

-------------

Commit messages:
 - fix
 - failing test

Changes: https://git.openjdk.org/jfx/pull/1692/files
  Webrev: https://webrevs.openjdk.org/?repo=jfx&pr=1692&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8333275
  Stats: 67 lines in 3 files changed: 65 ins; 0 del; 2 mod
  Patch: https://git.openjdk.org/jfx/pull/1692.diff
  Fetch: git fetch https://git.openjdk.org/jfx.git pull/1692/head:pull/1692

PR: https://git.openjdk.org/jfx/pull/1692

Reply via email to