diff options
Diffstat (limited to 'src/Document.cxx')
-rw-r--r-- | src/Document.cxx | 28 |
1 files changed, 6 insertions, 22 deletions
diff --git a/src/Document.cxx b/src/Document.cxx index aea2cfd0b..1a8c4020f 100644 --- a/src/Document.cxx +++ b/src/Document.cxx @@ -1363,10 +1363,7 @@ Sci::Position Document::Undo() { bool multiLine = false; const int steps = cb.StartUndo(); //Platform::DebugPrintf("Steps=%d\n", steps); - Sci::Position coalescedRemovePos = -1; - Sci::Position coalescedRemoveLen = 0; - Sci::Position prevRemoveActionPos = -1; - Sci::Position prevRemoveActionLen = 0; + Range coalescedRemove; // Default is empty at 0 for (int step = 0; step < steps; step++) { const Sci::Line prevLinesTotal = LinesTotal(); const Action &action = cb.GetUndoStep(); @@ -1377,12 +1374,6 @@ Sci::Position Document::Undo() { DocModification dm(ModificationFlags::Container | ModificationFlags::Undo); dm.token = action.position; NotifyModified(dm); - if (!action.mayCoalesce) { - coalescedRemovePos = -1; - coalescedRemoveLen = 0; - prevRemoveActionPos = -1; - prevRemoveActionLen = 0; - } } else { NotifyModified(DocModification( ModificationFlags::BeforeDelete | ModificationFlags::Undo, action)); @@ -1398,22 +1389,15 @@ Sci::Position Document::Undo() { if (action.at == ActionType::remove) { newPos += action.lenData; modFlags |= ModificationFlags::InsertText; - if ((coalescedRemoveLen > 0) && - (action.position == prevRemoveActionPos || action.position == (prevRemoveActionPos + prevRemoveActionLen))) { - coalescedRemoveLen += action.lenData; - newPos = coalescedRemovePos + coalescedRemoveLen; + if (coalescedRemove.Contains(action.position)) { + coalescedRemove.end += action.lenData; + newPos = coalescedRemove.end; } else { - coalescedRemovePos = action.position; - coalescedRemoveLen = action.lenData; + coalescedRemove = Range(action.position, action.position + action.lenData); } - prevRemoveActionPos = action.position; - prevRemoveActionLen = action.lenData; } else if (action.at == ActionType::insert) { modFlags |= ModificationFlags::DeleteText; - coalescedRemovePos = -1; - coalescedRemoveLen = 0; - prevRemoveActionPos = -1; - prevRemoveActionLen = 0; + coalescedRemove = Range(); } if (steps > 1) modFlags |= ModificationFlags::MultiStepUndoRedo; |