diff options
Diffstat (limited to 'src/Document.cxx')
-rw-r--r-- | src/Document.cxx | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/src/Document.cxx b/src/Document.cxx index 611da25a0..e5913ad98 100644 --- a/src/Document.cxx +++ b/src/Document.cxx @@ -503,21 +503,27 @@ int Document::Undo() { if (action.at == removeAction) { NotifyModified(DocModification( SC_MOD_BEFOREINSERT | SC_PERFORMED_UNDO, action)); + } else if (action.at == containerAction) { + DocModification dm(SC_MOD_CONTAINER | SC_PERFORMED_UNDO); + dm.token = action.position; + NotifyModified(dm); } else { NotifyModified(DocModification( SC_MOD_BEFOREDELETE | SC_PERFORMED_UNDO, action)); } cb.PerformUndoStep(); int cellPosition = action.position; - ModifiedAt(cellPosition); - newPos = cellPosition; + if (action.at != containerAction) { + ModifiedAt(cellPosition); + newPos = cellPosition; + } int modFlags = SC_PERFORMED_UNDO; // With undo, an insertion action becomes a deletion notification if (action.at == removeAction) { newPos += action.lenData; modFlags |= SC_MOD_INSERTTEXT; - } else { + } else if (action.at == insertAction) { modFlags |= SC_MOD_DELETETEXT; } if (steps > 1) @@ -558,19 +564,25 @@ int Document::Redo() { if (action.at == insertAction) { NotifyModified(DocModification( SC_MOD_BEFOREINSERT | SC_PERFORMED_REDO, action)); + } else if (action.at == containerAction) { + DocModification dm(SC_MOD_CONTAINER | SC_PERFORMED_REDO); + dm.token = action.position; + NotifyModified(dm); } else { NotifyModified(DocModification( SC_MOD_BEFOREDELETE | SC_PERFORMED_REDO, action)); } cb.PerformRedoStep(); - ModifiedAt(action.position); - newPos = action.position; + if (action.at != containerAction) { + ModifiedAt(action.position); + newPos = action.position; + } int modFlags = SC_PERFORMED_REDO; if (action.at == insertAction) { newPos += action.lenData; modFlags |= SC_MOD_INSERTTEXT; - } else { + } else if (action.at == removeAction) { modFlags |= SC_MOD_DELETETEXT; } if (steps > 1) |