Q: Does the global function FrameDirty
see changes to nested frames?
A: Yes. However, FrameDirty
is fooled by changes to bytes within binary objects. Since strings are implemented as binary objects, this means that FrameDirty
will not see changes to individual characters in a string. Since clParagraphViews
try (as much as possible) to work by manipulating the characters in the string rather than by creating a new string, this means that FrameDirty
can be easily fooled by normal editing of string data.
Here is an NTK Inspector-based example of the problem:
s := GetStores()[0]:CreateSoup("Test:DTS", []);
e := s:Add({slot: 'value, string: "A test entry", nested: {slot: 'notherValue}})
#4410B69 {slot: value,
String: "A test entry",
nested: {slot: notherValue},
_uniqueID: 0}
FrameDirty(e)
#2 NIL
e.string[0] := $a; // modify the string w/out changing its reference
FrameDirty(e)
#2 NIL
EntryChange(e);
e.string := "A new string"; // change the string reference
FrameDirty(e)
#1A TRUE
EntryChange(e);
e.nested.slot := 'newValue; // nested change, FrameDirty is deep.
FrameDirty(e)
#1A TRUE
s:RemoveFromStore() // cleanup.