X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fparagraph_funcs.C;h=4ec57ef3eed6e957a8e90b7da21ed677d4460512;hb=8765ab59cdddad67284007813ef25934ea0042ce;hp=f1af41bf81722557fb91c7ca04b25f9bfbc30eb1;hpb=db1bbb4a98cd94203dd9cc8c3ef4ef4d331b6a2b;p=lyx.git diff --git a/src/paragraph_funcs.C b/src/paragraph_funcs.C index f1af41bf81..4ec57ef3ee 100644 --- a/src/paragraph_funcs.C +++ b/src/paragraph_funcs.C @@ -15,11 +15,13 @@ #include "bufferparams.h" #include "lyxtext.h" #include "paragraph_pimpl.h" +#include "debug.h" namespace lyx { using std::string; +using std::endl; static bool moveItem(Paragraph & fromPar, pos_type fromPos, @@ -66,9 +68,6 @@ void breakParagraph(BufferParams const & bparams, Paragraph & par = pars[par_offset]; - // we will invalidate the row cache - par.rows().clear(); - // without doing that we get a crash when typing at the // end of a paragraph tmp->layout(bparams.getLyXTextClass().defaultLayout()); @@ -185,22 +184,25 @@ void mergeParagraph(BufferParams const & bparams, pos_type pos_end = next.size() - 1; pos_type pos_insert = par.size(); - // The imaginary end-of-paragraph character (at par.size()) has to be + // the imaginary end-of-paragraph character (at par.size()) has to be // marked as unmodified. Otherwise, its change is adopted by the first // character of the next paragraph. - - // FIXME: change tracking (MG) - par.setChange(par.size(), Change(Change::UNCHANGED)); + if (par.lookupChange(par.size()).type != Change::UNCHANGED) { + lyxerr[Debug::CHANGES] << + "merging par with inserted/deleted end-of-par character" << endl; + par.setChange(par.size(), Change(Change::UNCHANGED)); + } Change change = next.lookupChange(next.size()); - // ok, now copy the paragraph + + // move the content of the second paragraph to the end of the first one for (pos_type i = 0, j = pos_insert; i <= pos_end; ++i) { if (moveItem(next, 0, par, j, bparams)) { ++j; } } - // Move the change of the end-of-paragraph character - // FIXME: change tracking (MG) + + // move the change of the end-of-paragraph character par.setChange(par.size(), change); pars.erase(boost::next(pars.begin(), par_offset + 1)); @@ -240,10 +242,12 @@ bool isFirstInSequence(pit_type par_offset, ParagraphList const & pars) pit_type dhook_offset = depthHook(par_offset, pars, par.getDepth()); + if (dhook_offset == par_offset) + return true; + Paragraph const & dhook = pars[dhook_offset]; - return dhook_offset == par_offset - || dhook.layout() != par.layout() + return dhook.layout() != par.layout() || dhook.getDepth() != par.getDepth(); }