The attached patch fixes bug 1332. OK to apply?

Georg

PS: Uwe, I am not going to do anything for 1.3, because I don't understand 
the code well enough. 1.4 was quite easy to understand (although I am not 
familiar with the LyX core).
diff -p -r -U 3 -X excl.tmp lyx-1.4-clean/src/ChangeLog lyx-1.4-cvs/src/ChangeLog
--- lyx-1.4-clean/src/ChangeLog	2005-01-08 11:13:50.000000000 +0100
+++ lyx-1.4-cvs/src/ChangeLog	2005-01-09 16:43:46.000000000 +0100
@@ -1,3 +1,8 @@
+2005-01-09  Georg Baum  <[EMAIL PROTECTED]>
+
+	* CutAndPaste.C (pasteSelectionHelper): fix bug 1332 (preserve the
+	layout if pasting into an empty paragraph)
+
 2005-01-07  Lars Gullik Bjonnes  <[EMAIL PROTECTED]>
 
 	* tex-accent.C: add <string>
diff -p -r -U 3 -X excl.tmp lyx-1.4-clean/src/CutAndPaste.C lyx-1.4-cvs/src/CutAndPaste.C
--- lyx-1.4-clean/src/CutAndPaste.C	2004-12-02 14:04:39.000000000 +0100
+++ lyx-1.4-cvs/src/CutAndPaste.C	2005-01-09 16:34:04.000000000 +0100
@@ -151,8 +151,12 @@ pasteSelectionHelper(Buffer const & buff
 		}
 	}
 
-	// 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 & buff
 	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 & buff
 	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()) {

Reply via email to