This PR fixes the issue that after committing an edit on a 
ListView/TreeView/TableView/TreeTableView control, the control might lose the 
focus unexpectedly.

For that, it refactors the 
`ControlUtils::requestFocusOnControlOnlyIfCurrentFocusOwnerIsChild` method, in 
order to check if the control (`ListView`, `TreeView`, `TableView`, 
`TreeTableView`) should request the focus _before_ the actual focus owner 
(which could be the control added to the cell to edit its content, like a 
`TextField`) is removed from the cell, so the `Control::requestFocus` call, if 
needed, can be still invoked after the edit commit is done (as it was done 
before).

By adding `ControlUtils::controlShouldRequestFocusIfCurrentFocusOwnerIsChild` 
the `Cell::commitEdit` implementations can now query if the control should have 
the focus, after `super.commitEdit(newValue);` but before firing the 
`CellEditEvent` and calling `updateItem()`, and if the result is true, then 
request focus after the edit commit ends (like it was done before).

Two new tests per control have been included, to verify that the focus remains 
at the control, one for edit cancel (this passes before and after the proposed 
changes), one for edit commit (this fails before and passes after including the 
proposed fix).

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

Commit messages:
 - Refactor ControlUtils, check focus before owner is gone, and include tests

Changes: https://git.openjdk.org/jfx/pull/1411/files
  Webrev: https://webrevs.openjdk.org/?repo=jfx&pr=1411&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8324939
  Stats: 459 lines in 9 files changed: 438 ins; 5 del; 16 mod
  Patch: https://git.openjdk.org/jfx/pull/1411.diff
  Fetch: git fetch https://git.openjdk.org/jfx.git pull/1411/head:pull/1411

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

Reply via email to