X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FCutAndPaste.cpp;h=761a107b6ad8be1b83054f49b6fc91b8f384457a;hb=341e4480df5d12f69d83d1a0fc8d1c1232954689;hp=087d68ba14bf7aa6cf358a34014bb0620487af65;hpb=7f461f4392a19cf488dec005d2f12cfea83655d9;p=lyx.git diff --git a/src/CutAndPaste.cpp b/src/CutAndPaste.cpp index 087d68ba14..761a107b6a 100644 --- a/src/CutAndPaste.cpp +++ b/src/CutAndPaste.cpp @@ -90,7 +90,7 @@ bool checkPastePossible(int index) pair pasteSelectionHelper(Cursor & cur, ParagraphList const & parlist, - DocumentClass const * const docclass, ErrorList & errorlist) + DocumentClass const * const oldDocClass, ErrorList & errorlist) { Buffer const & buffer = cur.buffer(); pit_type pit = cur.pit(); @@ -104,7 +104,8 @@ pasteSelectionHelper(Cursor & cur, ParagraphList const & parlist, // Make a copy of the CaP paragraphs. ParagraphList insertion = parlist; - DocumentClass const * const tc = buffer.params().documentClassPtr(); + DocumentClass const * const newDocClass = + buffer.params().documentClassPtr(); // Now remove all out of the pars which is NOT allowed in the // new environment and set also another font if that is required. @@ -128,15 +129,27 @@ pasteSelectionHelper(Cursor & cur, ParagraphList const & parlist, } // set the paragraphs to empty layout if necessary - // note that we are doing this if the empty layout is - // supposed to be the default, not just if it is forced if (cur.inset().useEmptyLayout()) { - Layout const & layout = - buffer.params().documentClass().emptyLayout(); + bool forceEmptyLayout = cur.inset().forceEmptyLayout(); + Layout const & emptyLayout = newDocClass->emptyLayout(); + Layout const & defaultLayout = newDocClass->defaultLayout(); ParagraphList::iterator const end = insertion.end(); - for (ParagraphList::iterator par = insertion.begin(); - par != end; ++par) - par->setLayout(layout); + ParagraphList::iterator par = insertion.begin(); + for (; par != end; ++par) { + Layout const & parLayout = par->layout(); + if (forceEmptyLayout || parLayout == defaultLayout) + par->setLayout(emptyLayout); + } + } else { // check if we need to reset from empty layout + Layout const & defaultLayout = newDocClass->defaultLayout(); + Layout const & emptyLayout = newDocClass->emptyLayout(); + ParagraphList::iterator const end = insertion.end(); + ParagraphList::iterator par = insertion.begin(); + for (; par != end; ++par) { + Layout const & parLayout = par->layout(); + if (parLayout == emptyLayout) + par->setLayout(defaultLayout); + } } // Make sure there is no class difference. @@ -146,7 +159,7 @@ pasteSelectionHelper(Cursor & cur, ParagraphList const & parlist, // since we store pointers to insets at some places and we don't // want to invalidate them. insertion.swap(in.paragraphs()); - cap::switchBetweenClasses(docclass, tc, in, errorlist); + cap::switchBetweenClasses(oldDocClass, newDocClass, in, errorlist); insertion.swap(in.paragraphs()); ParagraphList::iterator tmpbuf = insertion.begin(); @@ -552,7 +565,7 @@ vector availableSelections() ParagraphList::const_iterator pit = pars.begin(); ParagraphList::const_iterator pend = pars.end(); for (; pit != pend; ++pit) { - asciiSel += pit->asString(false); + asciiSel += pit->asString(AS_STR_INSETS); if (asciiSel.size() > 25) { asciiSel.replace(22, docstring::npos, from_ascii("...")); @@ -608,6 +621,9 @@ void cutSelection(Cursor & cur, bool doclear, bool realcut) cur.selectionAsString(true)); } + if (begpit != endpit) + cur.updateFlags(Update::Force | Update::FitCursor); + boost::tie(endpit, endpos) = eraseSelectionHelper(bp, text->paragraphs(), @@ -770,7 +786,7 @@ void clearCutStack() docstring selection(size_t sel_index) { return sel_index < theCuts.size() - ? theCuts[sel_index].first.back().asString(false) + ? theCuts[sel_index].first.back().asString(AS_STR_INSETS) : docstring(); } @@ -861,7 +877,7 @@ void pasteClipboardGraphics(Cursor & cur, ErrorList & /* errorList */, // create inset for graphic InsetGraphics * inset = new InsetGraphics(cur.buffer()); InsetGraphicsParams params; - params.filename = EmbeddedFile(filename.absFilename(), cur.buffer().filePath()); + params.filename = support::DocFileName(filename.absFilename()); inset->setParams(params); cur.recordUndo(); cur.insert(inset);