Hi Martin,
> I got the idea for doing this is a sane way after tracing through the > code that caused list elements to flash. There was code in > fv_View::_generalUpdate to update every field in the document by > scanning every run in the document after every keypress. There were > some good ideas in this code, especially the "isLayoutDependent()" > method on field runs. I changed the name of this to > "needsFrequentUpdates()" and put another bool in fl_BlockLayout > "hasUpdatableField()". This is (un)set during a format if there is a > field run with "needsFrequentUpdates()" true. Then during the > background redraw (which happens every 0.5 seconds) blocks with > "HasUpdatableField()" set have a recalculateFields() done on them. If > the field width changes on the recalculation, the block is reformated. > Anyway it all works rather nicely and scales reasonablly well. Sounds very nice; I wish thought of it myself :-). > Fields like "Current Time" and "Word Count" have > "needsFrequentUpdates()" set true. Fields like "date", "page number" > and "liast label" do not. Except the "page number" field is layout dependent and should update if as a result of layout changes it moves onto a different page. The reason I added the layout rescanning code was that fields such as "page reference" would not reliably update. I think what we still need is "updateFields" method in ap_EditMethods.cpp, that the user could call to update all fields in the document, and would be automatically called (or better, based on preference settings) before printing. Tomas
