And incidently, I just found one of the 'off by some' [;-}] error when having a look at setLayout()'s undo...
-------- Note that there is quite some potential to remove code in text2.C along the lines of: - ParagraphList::iterator endpit = boost::next(send_cur.par()); - ParagraphList::iterator undoendpit = endpit; - ParagraphList::iterator pars_end = ownerParagraphs().end(); - - if (endpit != pars_end && endpit->getDepth()) { - while (endpit != pars_end && endpit->getDepth()) { - ++endpit; - undoendpit = endpit; - } - } else if (endpit != pars_end) { - // because of parindents etc. - ++endpit; - } - - setUndo(bv(), Undo::EDIT, sstart_cur.par(), boost::prior(undoendpit)); + setUndo(bv(), Undo::EDIT, sstart_cur.par(), send_cur.par()); Or is there anything important hidden in that code? A seemingly working patch is attached... Andre' -- Those who desire to give up Freedom in order to gain Security, will not have, nor do they deserve, either one. (T. Jefferson or B. Franklin or both...)
Index: lyxtext.h =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/lyxtext.h,v retrieving revision 1.174 diff -u -p -r1.174 lyxtext.h --- lyxtext.h 23 May 2003 15:30:46 -0000 1.174 +++ lyxtext.h 5 Jun 2003 12:10:34 -0000 @@ -127,8 +127,7 @@ public: /** set layout over selection and make a total rebreak of those paragraphs */ - ParagraphList::iterator - setLayout(LyXCursor & actual_cursor, + void setLayout(LyXCursor & actual_cursor, LyXCursor & selection_start, LyXCursor & selection_end, string const & layout); Index: text2.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/text2.C,v retrieving revision 1.368 diff -u -p -r1.368 text2.C --- text2.C 5 Jun 2003 11:34:54 -0000 1.368 +++ text2.C 5 Jun 2003 12:10:34 -0000 @@ -374,26 +374,11 @@ void LyXText::makeFontEntriesLayoutSpeci } -ParagraphList::iterator -LyXText::setLayout(LyXCursor & cur, LyXCursor & sstart_cur, +void LyXText::setLayout(LyXCursor & cur, LyXCursor & sstart_cur, LyXCursor & send_cur, string const & layout) { - ParagraphList::iterator endpit = boost::next(send_cur.par()); - ParagraphList::iterator undoendpit = endpit; - ParagraphList::iterator pars_end = ownerParagraphs().end(); - - if (endpit != pars_end && endpit->getDepth()) { - while (endpit != pars_end && endpit->getDepth()) { - ++endpit; - undoendpit = endpit; - } - } else if (endpit != pars_end) { - // because of parindents etc. - ++endpit; - } - - setUndo(bv(), Undo::EDIT, sstart_cur.par(), boost::prior(undoendpit)); + setUndo(bv(), Undo::EDIT, sstart_cur.par(), send_cur.par()); // ok we have a selection. This is always between sstart_cur // and sel_end cursor @@ -419,8 +404,6 @@ LyXText::setLayout(LyXCursor & cur, LyXC cur.par(pit); ++pit; } while (pit != epit); - - return endpit; } @@ -455,9 +438,10 @@ void LyXText::setLayout(string const & l return; } - ParagraphList::iterator endpit = setLayout(cursor, selection.start, - selection.end, layout); - redoParagraphs(selection.start, endpit); + lyxerr << "sel: " << selection.start.par()->id() << " - " << + selection.end.par()->id() << "\n"; + setLayout(cursor, selection.start, selection.end, layout); + redoParagraphs(selection.start, boost::next(selection.end.par())); // we have to reset the selection, because the // geometry could have changed