]> git.lyx.org Git - lyx.git/commitdiff
Fix to bug 3886
authorAlfredo Braunstein <abraunst@lyx.org>
Tue, 26 Jun 2007 14:11:42 +0000 (14:11 +0000)
committerAlfredo Braunstein <abraunst@lyx.org>
Tue, 26 Jun 2007 14:11:42 +0000 (14:11 +0000)
acceptChanges:

* move the bulk of acceptChanges without the call to DEPM to
paragraph_funcs

copySelectionHelper:

* call this new acceptChanges

pasteParagraphList:

* use Text::setCursor(Cusor,...) instead of Text::setCursor(CursorSlice...)
in order to have DEPM invoked at the end of the insertion

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@18892 a592a061-630c-0410-9148-cb99ea01b6c8

src/CutAndPaste.cpp
src/Text.cpp
src/paragraph_funcs.cpp
src/paragraph_funcs.h

index 3f1be1e43a46fb4c8abb0dc9fe9f8bac01e603a3..869d4707fee1987105cdceddfe49d35cbacda74d 100644 (file)
@@ -388,12 +388,7 @@ void copySelectionHelper(Buffer const & buf, ParagraphList & pars,
        }
 
        // do not copy text (also nested in insets) which is marked as deleted
-       // acceptChanges() is defined for Text rather than ParagraphList
-       // Thus we must wrap copy_pars into a Text object and cross our fingers
-       Text lt;
-       copy_pars.swap(lt.paragraphs());
-       lt.acceptChanges(buf.params());
-       copy_pars.swap(lt.paragraphs());
+       acceptChanges(copy_pars, buf.params());
 
        cutstack.push(make_pair(copy_pars, tc));
 }
@@ -723,7 +718,7 @@ void pasteParagraphList(Cursor & cur, ParagraphList const & parlist,
                                             textclass, errorList);
                updateLabels(cur.buffer());
                cur.clearSelection();
-               text->setCursor(cur.top(), ppp.first, ppp.second);
+               text->setCursor(cur, ppp.first, ppp.second);
        }
 
        // mathed is handled in InsetMathNest/InsetMathGrid
index 67b50ad6e4b8e4a7d481fec28768683d3e74d0ae..50311608a0f1955f6f614c1feb5d4cb71f607dde 100644 (file)
@@ -993,36 +993,8 @@ void Text::acceptOrRejectChanges(Cursor & cur, ChangeOp op)
 
 void Text::acceptChanges(BufferParams const & bparams)
 {
-       pit_type pars_size = static_cast<pit_type>(pars_.size());
-
-       // first, accept changes within each individual paragraph
-       // (do not consider end-of-par)
-       for (pit_type pit = 0; pit < pars_size; ++pit) {
-               if (!pars_[pit].empty())   // prevent assertion failure
-                       pars_[pit].acceptChanges(bparams, 0, pars_[pit].size());
-       }
-
-       // next, accept imaginary end-of-par characters
-       for (pit_type pit = 0; pit < pars_size; ++pit) {
-               pos_type pos = pars_[pit].size();
-
-               if (pars_[pit].isInserted(pos)) {
-                       pars_[pit].setChange(pos, Change(Change::UNCHANGED));
-               } else if (pars_[pit].isDeleted(pos)) {
-                       if (pit == pars_size - 1) {
-                               // we cannot remove a par break at the end of the last
-                               // paragraph; instead, we mark it unchanged
-                               pars_[pit].setChange(pos, Change(Change::UNCHANGED));
-                       } else {
-                               mergeParagraph(bparams, pars_, pit);
-                               --pit;
-                               --pars_size;
-                       }
-               }
-       }
-
-       // finally, invoke the DEPM
-       deleteEmptyParagraphMechanism(0, pars_size - 1, bparams.trackChanges);
+       lyx::acceptChanges(pars_, bparams);
+       deleteEmptyParagraphMechanism(0, pars_.size() - 1, bparams.trackChanges);
 }
 
 
index 66ff44d749a1f35fbd90ef1898ff3054d3c31cd8..bc2d3257a0c486d65a1285425342fdbd2ff17834 100644 (file)
@@ -317,4 +317,36 @@ int numberOfOptArgs(Paragraph const & par)
 }
 
 
+void acceptChanges(ParagraphList & pars, BufferParams const & bparams)
+{
+       pit_type pars_size = static_cast<pit_type>(pars.size());
+
+       // first, accept changes within each individual paragraph
+       // (do not consider end-of-par)
+       for (pit_type pit = 0; pit < pars_size; ++pit) {
+               if (!pars[pit].empty())   // prevent assertion failure
+                       pars[pit].acceptChanges(bparams, 0, pars[pit].size());
+       }
+
+       // next, accept imaginary end-of-par characters
+       for (pit_type pit = 0; pit < pars_size; ++pit) {
+               pos_type pos = pars[pit].size();
+
+               if (pars[pit].isInserted(pos)) {
+                       pars[pit].setChange(pos, Change(Change::UNCHANGED));
+               } else if (pars[pit].isDeleted(pos)) {
+                       if (pit == pars_size - 1) {
+                               // we cannot remove a par break at the end of the last
+                               // paragraph; instead, we mark it unchanged
+                               pars[pit].setChange(pos, Change(Change::UNCHANGED));
+                       } else {
+                               mergeParagraph(bparams, pars, pit);
+                               --pit;
+                               --pars_size;
+                       }
+               }
+       }
+}
+
+
 } // namespace lyx
index 5ae3ad555410afe7d208914249bb7bd3c5d371ff..59786081cbafd90e9d872a7a090855b60d93976c 100644 (file)
@@ -75,6 +75,9 @@ Font const outerFont(pit_type par_offset, ParagraphList const & pars);
 /// return the number of InsetOptArg in a paragraph
 int numberOfOptArgs(Paragraph const & par);
 
+/// accept the changes within the complete ParagraphList
+void acceptChanges(ParagraphList & pars, BufferParams const & bparams);
+
 
 } // namespace lyx