Redo 25580 the right way, again :-)

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@25618 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Abdelrazak Younes 2008-07-14 17:11:19 +00:00
parent a282ef926a
commit 0f7bae394c

View File

@ -73,8 +73,31 @@ struct UndoElement
MathData * ar, BufferParams const & bp,
bool ifb) :
kind(kin), cursor(cur), cell(cel), from(fro), end(en),
pars(pl), array(ar), bparams(bp), isFullBuffer(ifb)
{}
pars(pl), array(ar), bparams(0), isFullBuffer(ifb)
{
if (isFullBuffer)
bparams = new BufferParams(bp);
}
///
UndoElement(UndoElement const & ue)
{
kind = ue.kind;
cursor = ue.cursor;
cell = ue.cell;
from = ue.from;
end = ue.end;
pars = ue.pars;
array = ue.array;
bparams = ue.isFullBuffer
? new BufferParams(*ue.bparams) : ue.bparams;
isFullBuffer = ue.isFullBuffer;
}
///
~UndoElement()
{
if (isFullBuffer)
delete bparams;
}
/// Which kind of operation are we recording for?
UndoKind kind;
/// the position of the cursor
@ -90,7 +113,7 @@ struct UndoElement
/// the contents of the saved MathData (for mathed)
MathData * array;
/// Only used in case of full backups
BufferParams bparams;
BufferParams const * bparams;
/// Only used in case of full backups
bool isFullBuffer;
private:
@ -322,8 +345,9 @@ bool Undo::Private::textUndoOrRedo(DocIterator & cur, bool isUndoOperation)
if (undo.isFullBuffer) {
LASSERT(undo.pars, /**/);
// This is a full document
otherstack.top().bparams = buffer_.params();
buffer_.params() = undo.bparams;
delete otherstack.top().bparams;
otherstack.top().bparams = new BufferParams(buffer_.params());
buffer_.params() = *undo.bparams;
swap(buffer_.paragraphs(), *undo.pars);
delete undo.pars;
undo.pars = 0;