]> git.lyx.org Git - lyx.git/blobdiff - src/CutAndPaste.cpp
Fix bug 4166: Crash when middle button click on inset label
[lyx.git] / src / CutAndPaste.cpp
index ba82e9439f9bd2729debd796e752320b8b0eb44d..2cadd1deebf39073d75ede41c749179f9b13f9f1 100644 (file)
@@ -130,26 +130,26 @@ pasteSelectionHelper(Cursor & cur, ParagraphList const & parlist,
                }
        }
 
-       // set the paragraphs to empty layout if necessary
+       // set the paragraphs to plain layout if necessary
        if (cur.inset().usePlainLayout()) {
                bool forcePlainLayout = cur.inset().forcePlainLayout();
-               Layout const & emptyLayout = newDocClass->emptyLayout();
+               Layout const & plainLayout = newDocClass->plainLayout();
                Layout const & defaultLayout = newDocClass->defaultLayout();
                ParagraphList::iterator const end = insertion.end();
                ParagraphList::iterator par = insertion.begin();
                for (; par != end; ++par) {
                        Layout const & parLayout = par->layout();
                        if (forcePlainLayout || parLayout == defaultLayout)
-                               par->setLayout(emptyLayout);
+                               par->setLayout(plainLayout);
                }
-       } else { // check if we need to reset from empty layout
+       } else { // check if we need to reset from plain layout
                Layout const & defaultLayout = newDocClass->defaultLayout();
-               Layout const & emptyLayout = newDocClass->emptyLayout();
+               Layout const & plainLayout = newDocClass->plainLayout();
                ParagraphList::iterator const end = insertion.end();
                ParagraphList::iterator par = insertion.begin();
                for (; par != end; ++par) {
                        Layout const & parLayout = par->layout();
-                       if (parLayout == emptyLayout)
+                       if (parLayout == plainLayout)
                                par->setLayout(defaultLayout);
                }
        }
@@ -286,6 +286,9 @@ pasteSelectionHelper(Cursor & cur, ParagraphList const & parlist,
                // merge the first par of the insertion with the current par
                mergeParagraph(buffer.params(), pars, pit);
        }
+       //FIXME: We should call setBuffer() on each inserted paragraph.
+       // instead, we call setBuffer() for the main inset at the beginning
+       // of updateLabels()
 
        pit_type last_paste = pit + insertion.size() - 1;
 
@@ -520,7 +523,7 @@ void switchBetweenClasses(DocumentClass const * const oldone,
                newtc.addLayoutIfNeeded(name);
 
                if (in.usePlainLayout())
-                       it->setLayout(newtc.emptyLayout());
+                       it->setLayout(newtc.plainLayout());
                else
                        it->setLayout(newtc[name]);
        }
@@ -552,9 +555,11 @@ void switchBetweenClasses(DocumentClass const * const oldone,
 }
 
 
-vector<docstring> availableSelections()
+vector<docstring> availableSelections(Buffer const * buf)
 {
        vector<docstring> selList;
+       if (!buf)
+               return selList;
 
        CutStack::const_iterator cit = theCuts.begin();
        CutStack::const_iterator end = theCuts.end();
@@ -566,7 +571,10 @@ vector<docstring> availableSelections()
                ParagraphList::const_iterator pit = pars.begin();
                ParagraphList::const_iterator pend = pars.end();
                for (; pit != pend; ++pit) {
-                       asciiSel += pit->asString(AS_STR_INSETS);
+                       Paragraph par(*pit, 0, 26);
+                       // adapt paragraph to current buffer.
+                       par.setBuffer(const_cast<Buffer &>(*buf));
+                       asciiSel += par.asString(AS_STR_INSETS);
                        if (asciiSel.size() > 25) {
                                asciiSel.replace(22, docstring::npos,
                                                 from_ascii("..."));
@@ -711,8 +719,8 @@ void copySelectionToStack(Cursor & cur, CutStack & cutstack)
                ParagraphList pars;
                Paragraph par;
                BufferParams const & bp = cur.buffer().params();
-               // FIXME This should be the empty layout...right?
-               par.setLayout(bp.documentClass().emptyLayout());
+               // FIXME This should be the plain layout...right?
+               par.setLayout(bp.documentClass().plainLayout());
                par.insert(0, grabSelection(cur), Font(), Change(Change::UNCHANGED));
                pars.push_back(par);
                cutstack.push(make_pair(pars, bp.documentClassPtr()));
@@ -739,7 +747,7 @@ void copySelection(Cursor & cur, docstring const & plaintext)
                ParagraphList pars;
                Paragraph par;
                BufferParams const & bp = cur.buffer().params();
-               par.setLayout(bp.documentClass().emptyLayout());
+               par.setLayout(bp.documentClass().plainLayout());
                par.insert(0, plaintext, Font(), Change(Change::UNCHANGED));
                pars.push_back(par);
                theCuts.push(make_pair(pars, bp.documentClassPtr()));