aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/Document.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'src/Document.cxx')
-rw-r--r--src/Document.cxx28
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;