diff --git a/svl/source/undo/undo.cxx b/svl/source/undo/undo.cxx index 1caf382a8bec..a198f271b415 100644 --- a/svl/source/undo/undo.cxx +++ b/svl/source/undo/undo.cxx @@ -1254,6 +1254,8 @@ void SfxUndoManager::RemoveOldestUndoAction() void SfxUndoManager::dumpAsXml(xmlTextWriterPtr pWriter) const { + UndoManagerGuard aGuard(*m_xData); + bool bOwns = false; if (!pWriter) { @@ -1264,9 +1266,23 @@ void SfxUndoManager::dumpAsXml(xmlTextWriterPtr pWriter) const xmlTextWriterStartElement(pWriter, BAD_CAST("sfxUndoManager")); xmlTextWriterWriteAttribute(pWriter, BAD_CAST("nUndoActionCount"), BAD_CAST(OString::number(GetUndoActionCount()).getStr())); + xmlTextWriterWriteAttribute(pWriter, BAD_CAST("nRedoActionCount"), BAD_CAST(OString::number(GetRedoActionCount()).getStr())); + xmlTextWriterStartElement(pWriter, BAD_CAST("undoActions")); for (size_t i = 0; i < GetUndoActionCount(); ++i) - GetUndoAction(i)->dumpAsXml(pWriter); + { + const SfxUndoArray* pUndoArray = m_xData->pActUndoArray; + pUndoArray->aUndoActions[pUndoArray->nCurUndoAction - 1 - i].pAction->dumpAsXml(pWriter); + } + xmlTextWriterEndElement(pWriter); + + xmlTextWriterStartElement(pWriter, BAD_CAST("redoActions")); + for (size_t i = 0; i < GetRedoActionCount(); ++i) + { + const SfxUndoArray* pUndoArray = m_xData->pActUndoArray; + pUndoArray->aUndoActions[pUndoArray->nCurUndoAction + i].pAction->dumpAsXml(pWriter); + } + xmlTextWriterEndElement(pWriter); xmlTextWriterEndElement(pWriter); if (bOwns)