On Thu, 6 Feb 2025 19:26:25 GMT, Andy Goryachev <ango...@openjdk.org> wrote:

> Root Cause:
> (Multiple) properties are getting bound to the global 
> `Platform.accessibilityActive` property. Binding (and I say, accessing) of 
> properties is not thread-safe.
> 
> I also changed the design a bit.  Originally, every symbol in a chart had its 
> `focusTraversableProperty` bound to `Platform.accessibilityActive` in order 
> to enable the accessibility navigation across the chart data points.  This is 
> rather inefficient, as the property has to manage (thousands?) of listeners.
> 
> Instead, a single boolean property is added to each chart, with a listener 
> added to it which iterates over data symbols to toggle the 
> `focusTraversableProperty` directly.
> 
> The exact moment when the new property gets bound is also important, and has 
> to happen in the FX application thread.
> 
> With this change, it is safe to create and populate charts with data in a 
> background thread.
> 
> ---
> 
> ## NOTES
> 
> 1. It looks like the `Platform.accessibilityActive` property never 
> transitions back to false  after it transitioned to true.  Some say it is 
> because there is no mechanism in the platform to get notified which cannot 
> possibly be true.
> 2. The javadoc for `Platform.accessibilityActiveProperty()` method stipulates 
> that "_This method may be called from any thread_" which is patently not true 
> as the current implementation is simply not thread-safe.

Reviewers: @kevinrushforth @azuev-java

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

PR Comment: https://git.openjdk.org/jfx/pull/1697#issuecomment-2640901979

Reply via email to