]> git.lyx.org Git - lyx.git/blobdiff - src/CutAndPaste.cpp
We don't need to crash here, but can try to continue in release
[lyx.git] / src / CutAndPaste.cpp
index ccde5878f9255c7eeb0bda2d6d81280b0103e228..4ec9811d90bb8fd086e2e30be20ecb958bf1b620 100644 (file)
@@ -160,7 +160,7 @@ pasteSelectionHelper(DocIterator const & cur, ParagraphList const & parlist,
        // set the paragraphs to plain layout if necessary
        DocumentClassConstPtr newDocClass = buffer.params().documentClassPtr();
        if (cur.inset().usePlainLayout()) {
-               bool forcePlainLayout = cur.inset().forcePlainLayout();
+               bool forcePlainLayout = target_inset->forcePlainLayout();
                Layout const & plainLayout = newDocClass->plainLayout();
                Layout const & defaultLayout = newDocClass->defaultLayout();
                ParagraphList::iterator const end = insertion.end();
@@ -486,16 +486,18 @@ Buffer * copyToTempBuffer(ParagraphList const & paragraphs, DocumentClassConstPt
        // to be so, but the alternative is to construct a new one of these (with a
        // new temporary directory, etc) every time, and then to destroy it. So maybe
        // it's worth just keeping this one around.
-       // FIXME THREAD
        static TempFile tempfile("clipboard.internal");
        tempfile.setAutoRemove(false);
-       static Buffer * staticbuffer = theBufferList().newInternalBuffer(
-                       tempfile.name().absFileName());
-
-       // These two things only really need doing the first time.
-       staticbuffer->setUnnamed(true);
-       staticbuffer->inset().setBuffer(*staticbuffer);
-
+       // The initialization of staticbuffer is thread-safe. Using a lambda
+       // guarantees that the properties are set only once.
+       static Buffer * staticbuffer = [&](){
+               Buffer * b =
+                       theBufferList().newInternalBuffer(tempfile.name().absFileName());
+               b->setUnnamed(true);
+               b->inset().setBuffer(*b);
+               //initialize staticbuffer with b
+               return b;
+       }();
        // Use a clone for the complicated stuff so that we do not need to clean
        // up in order to avoid a crash.
        Buffer * buffer = staticbuffer->cloneBufferOnly();
@@ -1168,6 +1170,7 @@ bool pasteClipboardText(Cursor & cur, ErrorList & errorList, bool asParagraphs,
                cur.text()->insertStringAsParagraphs(cur, text, cur.current_font);
        else
                cur.text()->insertStringAsLines(cur, text, cur.current_font);
+       cur.forceBufferUpdate();
        return true;
 }