When a scene graph contains multiple nested focused nodes (this can happen with 
`TableView` and other controls), the `focusWithin` bits that are cleared when a 
focused node is de-focused must only be cleared when there is no other nested 
node in the scene graph that would also cause `focusWithin` to be set.

For example, consider a scene graph of nested nodes:
A -> B -> C -> D

When B and D are both focused, the scene graph looks like this:
A(`focusWithin`)
-> B(`focused`, `focusWithin`)
-> C(`focusWithin`)
-> D(`focused`, `focusWithin`)

When B is de-focused, the `focusWithin` flags must still be preserved because D 
remains focused.

This PR fixes the issue by counting the number of times `focusWithin` has been 
"set", and only clears it when it has been "un-set" an equal number of times.

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

Commit messages:
 - focusWithin fix
 - Failing test

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

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

Reply via email to