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