It's me again :-)
This time, I fixed a few calls to Paragraph::insertChar. Depending on the buffer's parameter, the character is inserted as UNCHANGED or INSERTED.
Please let me know if something looks suspicious. There are more similar places, which I will fix in the next couple of days (step by step)
Michael PS: Only about 470 lines of diff output left!
Index: buffer.C =================================================================== --- buffer.C (Revision 13940) +++ buffer.C (Arbeitskopie) @@ -521,23 +521,26 @@ } else if (*cit == '\t') { if (!par.isFreeSpacing()) { // tabs are like spaces here - par.insertChar(pos, ' ', font, Change(Change::INSERTED)); + par.insertChar(pos, ' ', font, Change(params().tracking_changes ? + Change::INSERTED : Change::UNCHANGED)); ++pos; - space_inserted = true; } else { const pos_type n = 8 - pos % 8; for (pos_type i = 0; i < n; ++i) { - par.insertChar(pos, ' ', font, Change(Change::INSERTED)); + par.insertChar(pos, ' ', font, + Change(params().tracking_changes ? + Change::INSERTED : Change::UNCHANGED)); ++pos; } - space_inserted = true; } + space_inserted = true; } else if (!isPrintable(*cit)) { // Ignore unprintables continue; } else { // just insert the character - par.insertChar(pos, *cit, font, Change(Change::INSERTED)); + par.insertChar(pos, *cit, font, Change(params().tracking_changes ? + Change::INSERTED : Change::UNCHANGED)); ++pos; space_inserted = (*cit == ' '); }