From f2a07f0ac9f33d20f75c99a4c3058db4db621019 Mon Sep 17 00:00:00 2001 From: Georg Baum Date: Mon, 10 Jan 2005 13:10:48 +0000 Subject: [PATCH] fix bug 1332 git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@9461 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/ChangeLog | 5 +++++ src/CutAndPaste.C | 31 ++++++++++++++++++++++--------- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 4e93267d40..51460ea0bc 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2005-01-09 Georg Baum + + * CutAndPaste.C (pasteSelectionHelper): fix bug 1332 (preserve the + layout if pasting into an empty paragraph) + 2005-01-07 Lars Gullik Bjonnes * tex-accent.C: add diff --git a/src/CutAndPaste.C b/src/CutAndPaste.C index 1d567c022f..d8c65475f2 100644 --- a/src/CutAndPaste.C +++ b/src/CutAndPaste.C @@ -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()) { -- 2.39.2