Actual behavior:
When the renderer-independent property list (common) of a data node is modified (e.g. dataNode->SetVisibility(true, nullptr)) the 'm_PropertyList' member of a data node will be modified. This in turn will mark the data node as modified.
When a renderer-specific property list of a data node is modified (e.g. dataNode->SetVisibility(true, specificRenderer)) the 'm_PropertyList' member of a data node will not be modified. Instead the corresponding property list in the 'm_MapOfPropertyLists' is modified. This in turn WILL NOT mark the data node as modified.
I suspect this has something to do with the data node not creating a callback on the 'm_MapOfPropertyLists' or its entries.
Problem with this behavior:
Modifying a render-specific property list of a data node may lead to the need of retrieving the modified property list again.
In a scenario, where the modification of such a property list should be observed, the observer could listen to the data storage events in order to catch the modification of a data node. The modifier then has to explicitly call someting like 'dataNode->Modified()' in order to trigger the event for the observer (as stated above, modifying a render-specific property list will not trigger this event automatically).
Another approach would be to observe each render-specifiy property list of all data nodes manually.
Discussion:
- is this a flaw in the data node design?
- would it be possible to modify the data node if the 'm_MapOfPropertyLists' or its entries have changed?
- is it actually favored to explicitly call the 'Modified()' function of a data node?