X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fchanges.C;h=1ad18c6bf29048537b13eca6de4c4b2d8cd202c5;hb=c4320d24cd2d29c2e77958b4a8fd44f2bd587ca7;hp=53d89e494e70c7e5d3256d8e483ef388a67b646d;hpb=f43176aebc5d88b1fa9345f7502355010fde130d;p=lyx.git diff --git a/src/changes.C b/src/changes.C index 53d89e494e..1ad18c6bf2 100644 --- a/src/changes.C +++ b/src/changes.C @@ -16,7 +16,6 @@ #include "changes.h" #include "debug.h" -#include #include @@ -31,27 +30,32 @@ using std::max; * Class Change has a changetime field that specifies the exact time at which * a specific change was made. The change time is used as a guidance for the * user while editing his document. Presently, it is not considered for LaTeX - * export. To avoid that every keystroke results in a separate change, a - * tolerance interval of 5 minutes is used. That means if there are two adjacent - * changes that only differ in their change time with abs(ct1 - ct2) < 300 sec, - * they will be merged (and the later change time is preserved). - * Technically, the check for equality (or similarity) is made in operator==(...). - * The merging of similar changes happens in method merge(). + * export. + * When merging two adjacent changes, the changetime is not considered, + * only the equality of the change type and author is checked (in method + * isSimilarTo(...)). If two changes are in fact merged (in method merge()), + * the later change time is preserved. */ -bool operator==(Change const & l, Change const & r) +bool Change::isSimilarTo(Change const & change) { - if (l.type != r.type) { + if (type != change.type) { return false; } - if (l.type == Change::UNCHANGED) { + if (type == Change::UNCHANGED) { return true; } - return l.author == r.author - // both changes made within 5 minutes? - && abs(difftime(l.changetime, r.changetime)) < 300; + return author == change.author; +} + + +bool operator==(Change const & l, Change const & r) +{ + return l.type == r.type && + l.author == r.author && + l.changetime == r.changetime; } @@ -228,9 +232,6 @@ void Changes::insert(Change const & change, lyx::pos_type pos) Change const Changes::lookup(pos_type const pos) const { - if (table_.empty()) { - return Change(Change::UNCHANGED); - } ChangeTable::const_iterator it = table_.begin(); ChangeTable::const_iterator const end = table_.end(); @@ -293,7 +294,7 @@ void Changes::merge() if (it + 1 == table_.end()) break; - if (it->change == (it + 1)->change && it->range.end == (it + 1)->range.start) { + if (it->change.isSimilarTo((it + 1)->change) && it->range.end == (it + 1)->range.start) { if (lyxerr.debugging(Debug::CHANGES)) { lyxerr[Debug::CHANGES] << " merging ranges (" << it->range.start << ", " << it->range.end << ") and (" << (it + 1)->range.start << ", "