From 0ad418136149432b43b3f1e5033f901ece9ee6db Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=BCrgen=20Spitzm=C3=BCller?= Date: Thu, 24 Feb 2005 13:17:45 +0000 Subject: [PATCH] (Johnathan Burchill:) fix crash when pasting insets in change tracking mode [bug 1277] git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@9678 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/ChangeLog | 5 +++++ src/paragraph_funcs.C | 28 ++++++++++++++++++++-------- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 63b289a53f..f0c46b9293 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2005-02-24 Johnathan Burchill + + * paragraph_funcs.C: fix crash when pasting insets in change + tracking mode [bug 1277] (honour change type in moveItem). + 2005-02-23 Georg Baum * LaTeX.C (scanLogFile): recognize pdfTeX warnings diff --git a/src/paragraph_funcs.C b/src/paragraph_funcs.C index 8def8c6f22..9add699a6d 100644 --- a/src/paragraph_funcs.C +++ b/src/paragraph_funcs.C @@ -58,7 +58,12 @@ using std::pair; namespace { bool moveItem(Paragraph & from, Paragraph & to, - BufferParams const & params, pos_type i, pos_type j) + BufferParams const & params, pos_type i, pos_type j, + Change change = Change(Change::INSERTED)); + +bool moveItem(Paragraph & from, Paragraph & to, + BufferParams const & params, pos_type i, pos_type j, + Change change) { Paragraph::value_type const tmpchar = from.getChar(i); LyXFont tmpfont = from.getFontSettings(params, i); @@ -76,11 +81,11 @@ bool moveItem(Paragraph & from, Paragraph & to, return false; } if (tmpinset) - to.insertInset(j, tmpinset, tmpfont); + to.insertInset(j, tmpinset, tmpfont, change); } else { if (!to.checkInsertChar(tmpfont)) return false; - to.insertChar(j, tmpchar, tmpfont); + to.insertChar(j, tmpchar, tmpfont, change); } return true; } @@ -192,6 +197,9 @@ void breakParagraphConservative(BufferParams const & bparams, Paragraph & tmp = *pars.insert(pars.begin() + par_offset + 1, Paragraph()); Paragraph & par = pars[par_offset]; + if (bparams.tracking_changes) + tmp.trackChanges(); + tmp.makeSameLayout(par); // When can pos > size()? @@ -201,12 +209,14 @@ void breakParagraphConservative(BufferParams const & bparams, // paragraph pos_type pos_end = par.size() - 1; - for (pos_type i = pos, j = pos; i <= pos_end; ++i) - if (moveItem(par, tmp, bparams, i, j - pos)) + for (pos_type i = pos, j = pos; i <= pos_end; ++i) { + Change::Type change = par.lookupChange(i); + if (moveItem(par, tmp, bparams, i, j - pos, change)) ++j; + } for (pos_type k = pos_end; k >= pos; --k) - par.erase(k); + par.eraseIntern(k); } } @@ -221,9 +231,11 @@ void mergeParagraph(BufferParams const & bparams, pos_type pos_insert = par.size(); // ok, now copy the paragraph - for (pos_type i = 0, j = 0; i <= pos_end; ++i) - if (moveItem(next, par, bparams, i, pos_insert + j)) + for (pos_type i = 0, j = 0; i <= pos_end; ++i) { + Change::Type change = next.lookupChange(i); + if (moveItem(next, par, bparams, i, pos_insert + j, change)) ++j; + } pars.erase(pars.begin() + par_offset + 1); } -- 2.39.5