Martin Vermeer wrote:
> Fair enough... but could you put a link to this discussion
> on bugzilla?
Finally, I couldn't resist. See attached patch (against trunk). Please test
someone.
BTW this bug is a consequence of the fix for bug 1332.
Jürgen
Index: src/CutAndPaste.C
===================================================================
--- src/CutAndPaste.C (Revision 14866)
+++ src/CutAndPaste.C (Arbeitskopie)
@@ -126,7 +126,7 @@ pair<PitPosPair, pit_type>
pasteSelectionHelper(Buffer const & buffer,
ParagraphList & pars, pit_type pit, int pos,
ParagraphList const & parlist, textclass_type textclass,
- ErrorList & errorlist)
+ ErrorList & errorlist, bool targetlayout)
{
if (parlist.empty())
return make_pair(PitPosPair(pit, pos), pit);
@@ -206,7 +206,7 @@ pasteSelectionHelper(Buffer const & buff
}
bool const empty = pars[pit].empty();
- if (!empty) {
+ if (!empty || targetlayout) {
// Make the buf exactly the same layout as the cursor
// paragraph.
insertion.begin()->makeSameLayout(pars[pit]);
@@ -612,7 +612,8 @@ std::string getSelection(Buffer const &
void pasteParagraphList(LCursor & cur, ParagraphList const & parlist,
- textclass_type textclass, ErrorList & errorList)
+ textclass_type textclass, ErrorList & errorList,
+ bool targetlayout)
{
if (cur.inTexted()) {
LyXText * text = cur.text();
@@ -628,7 +629,7 @@ void pasteParagraphList(LCursor & cur, P
text->paragraphs(),
cur.pit(), cur.pos(),
parlist, textclass,
- errorList);
+ errorList, targetlayout);
updateLabels(cur.buffer());
cur.clearSelection();
text->setCursor(cur, ppp.first, ppp.second);
@@ -639,14 +640,14 @@ void pasteParagraphList(LCursor & cur, P
}
-void pasteSelection(LCursor & cur, ErrorList & errorList, size_t sel_index)
+void pasteSelection(LCursor & cur, ErrorList & errorList, size_t sel_index, bool targetlayout)
{
// this does not make sense, if there is nothing to paste
if (!checkPastePossible(sel_index))
return;
pasteParagraphList(cur, theCuts[sel_index].first,
- theCuts[sel_index].second, errorList);
+ theCuts[sel_index].second, errorList, targetlayout);
cur.setSelection();
}
Index: src/CutAndPaste.h
===================================================================
--- src/CutAndPaste.h (Revision 14866)
+++ src/CutAndPaste.h (Arbeitskopie)
@@ -55,11 +55,13 @@ void cutSelection(LCursor & cur, bool do
///
void copySelection(LCursor & cur);
///
-void pasteSelection(LCursor & cur, ErrorList &, size_t sel_index = 0);
+void pasteSelection(LCursor & cur, ErrorList &, size_t sel_index = 0,
+ bool targetlayout = false);
///
void pasteParagraphList(LCursor & cur, ParagraphList const & parlist,
- textclass_type textclass, ErrorList & errorList);
+ textclass_type textclass, ErrorList & errorList,
+ bool targetlayout = false);
/** Needed to switch between different classes. This works
Index: src/text3.C
===================================================================
--- src/text3.C (Revision 14866)
+++ src/text3.C (Arbeitskopie)
@@ -278,8 +278,12 @@ bool doInsertInset(LCursor & cur, LyXTex
if (edit)
inset->edit(cur, true);
- if (gotsel && pastesel)
- cur.bv().owner()->dispatch(FuncRequest(LFUN_PASTE));
+ if (gotsel && pastesel) {
+ // paste, but use the standard layout in the first par.
+ pasteSelection(cur, cur.bv().buffer()->errorList("Paste"),
+ 0, true);
+ cur.clearSelection();
+ }
return true;
}