Affects Version/s: None
Fix Version/s: None
As we are now starting to address more and more complicated UI scenarios with multiple components interacting with the same model, support for "backwash prevention" needs to be upgraded. This is a harmful phenomenon where changes triggered by a particular UI control can "wash back" to trigger changes on itself, after having gone through the phase of propagating to the model, notifying the listeners, one of which is for that same UI control - the result is an indefinite propagation of changes.
Existing framework support and simple techniques (for example, ignoring "null changes" which leave the model or UI state unchanged, or simple use of the "source" flag on a ChangeApplier request) have been enough to deal with the cases we have met so far - however, a situation arisen within the VideoPlayer regards support to be upgraded to the next level of quality. This situation involves in interaction between the VideoPlayer volume control and mute button. The "indirect infinite recursion" is triggered through the following path:
mute control triggered
--> volume set to 0 (model)
--> slider value set to 0
---> listener to volume model to 0
--> mute button listener
The next level of support stores the set of changes sources accumulated so far within a "threadLocal" which accumulates names until all events triggered from top-level have concluded.