]> git.lyx.org Git - lyx.git/commitdiff
fix bug 1332
authorGeorg Baum <Georg.Baum@post.rwth-aachen.de>
Mon, 10 Jan 2005 13:10:48 +0000 (13:10 +0000)
committerGeorg Baum <Georg.Baum@post.rwth-aachen.de>
Mon, 10 Jan 2005 13:10:48 +0000 (13:10 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@9461 a592a061-630c-0410-9148-cb99ea01b6c8

src/ChangeLog
src/CutAndPaste.C

index 4e93267d4008c11432216ce9ea172381e7311c91..51460ea0bcef2c04105069cfee753179b33aea70 100644 (file)
@@ -1,3 +1,8 @@
+2005-01-09  Georg Baum  <Georg.Baum@post.rwth-aachen.de>
+
+       * CutAndPaste.C (pasteSelectionHelper): fix bug 1332 (preserve the
+       layout if pasting into an empty paragraph)
+
 2005-01-07  Lars Gullik Bjonnes  <larsbj@gullik.net>
 
        * tex-accent.C: add <string>
index 1d567c022fb5d50d9033cb9273a1e66c8029d96c..d8c65475f268ce57c21daaab1e2d4f6c713370c1 100644 (file)
@@ -151,8 +151,12 @@ pasteSelectionHelper(Buffer const & buffer, ParagraphList & pars,
                }
        }
 
-       // Make the buf exactly the same layout as the cursor paragraph.
-       insertion.begin()->makeSameLayout(pars[pit]);
+       bool const empty = pars[pit].empty();
+       if (!empty) {
+               // Make the buf exactly the same layout as the cursor
+               // paragraph.
+               insertion.begin()->makeSameLayout(pars[pit]);
+       }
 
        // Prepare the paragraphs and insets for insertion.
        // A couple of insets store buffer references so need updating.
@@ -182,15 +186,24 @@ pasteSelectionHelper(Buffer const & buffer, ParagraphList & pars,
        std::swap(in.paragraphs(), insertion);
 
        // Split the paragraph for inserting the buf if necessary.
-       bool did_split = false;
-       if (pars[pit].size() || pit + 1 == pit_type(pars.size())) {
+       if (!empty)
                breakParagraphConservative(buffer.params(), pars, pit, pos);
-               did_split = true;
-       }
 
        // Paste it!
-       pars.insert(pars.begin() + pit + 1, insertion.begin(), insertion.end());
-       mergeParagraph(buffer.params(), pars, pit);
+       if (empty) {
+               pars.insert(pars.begin() + pit, insertion.begin(),
+                           insertion.end());
+
+               // merge the empty par with the last par of the insertion
+               mergeParagraph(buffer.params(), pars,
+                              pit + insertion.size() - 1);
+       } else {
+               pars.insert(pars.begin() + pit + 1, insertion.begin(),
+                           insertion.end());
+
+               // merge the first par of the insertion with the current par
+               mergeParagraph(buffer.params(), pars, pit);
+       }
 
        pit_type last_paste = pit + insertion.size() - 1;
 
@@ -199,7 +212,7 @@ pasteSelectionHelper(Buffer const & buffer, ParagraphList & pars,
        pos = pars[last_paste].size();
 
        // Maybe some pasting.
-       if (did_split && last_paste + 1 != pit_type(pars.size())) {
+       if (!empty && last_paste + 1 != pit_type(pars.size())) {
                if (pars[last_paste + 1].hasSameLayout(pars[last_paste])) {
                        mergeParagraph(buffer.params(), pars, last_paste);
                } else if (pars[last_paste + 1].empty()) {