]> git.lyx.org Git - lyx.git/blobdiff - src/insets/InsetTabular.cpp
Fix (again) bug #5754: Caption inset not dissolved when unsetting longtable caption...
[lyx.git] / src / insets / InsetTabular.cpp
index e3611d638b1c2772d1a43e84f640f6fefc1ab6f7..611e29f01b5a9a691b3c76ada4d1a9d98822665a 100644 (file)
@@ -38,7 +38,6 @@
 #include "LyXRC.h"
 #include "MetricsInfo.h"
 #include "OutputParams.h"
-#include "paragraph_funcs.h"
 #include "Paragraph.h"
 #include "ParagraphParameters.h"
 #include "ParIterator.h"
@@ -549,6 +548,7 @@ Tabular::CellData::CellData(CellData const & cs)
          p_width(cs.p_width),
          inset(dynamic_cast<InsetTableCell *>(cs.inset->clone()))
 {
+       inset->setBuffer(cs.inset->buffer());
 }
 
 Tabular::CellData & Tabular::CellData::operator=(CellData cs)
@@ -1030,7 +1030,7 @@ void toggleFixedWidth(Cursor & cur, InsetTableCell * inset, bool fixedWidth)
        // reset layout
        cur.push(*inset);
        // undo information has already been recorded
-       inset->getText(0)->setLayout(cur.bv().buffer(), 0, cur.lastpit() + 1,
+       inset->getText(0)->setLayout(0, cur.lastpit() + 1,
                        bp.documentClass().plainLayoutName());
        cur.pop();
 }
@@ -1798,9 +1798,10 @@ Tabular::idx_type Tabular::setLTCaption(row_type row, bool what)
                setRightLine(i, false);
        } else {
                unsetMultiColumn(i);
-               // FIXME: when unsetting a caption row, also all existing captions
-               // in this row must be dissolved, see (bug 5754)
-               // dispatch(FuncRequest(LFUN_INSET_DISSOLVE, "caption-insert"));
+               // When unsetting a caption row, also all existing
+               // captions in this row must be dissolved.
+               lyx::dispatch(FuncRequest(LFUN_LINE_BEGIN));
+               lyx::dispatch(FuncRequest(LFUN_INSET_DISSOLVE, "caption"));
        }
        row_info[row].caption = what;
        return i;
@@ -3511,11 +3512,11 @@ void InsetTabular::doDispatch(Cursor & cur, FuncRequest & cmd)
                                && cur.pos() == cur.lastpos())
                                || (!next_cell && cur.pit() == 0 && cur.pos() == 0));
 
+                       bool const empty_cell = cur.lastpos() == 0 && cur.lastpit() == 0;
+
                        // ...try to dispatch to the cell's inset.
                        cell(cur.idx())->dispatch(cur, cmd);
 
-                       bool const empty_cell = cur.lastpos() == 0 && cur.lastpit() == 0;
-                       
                        // When we already have a selection we want to select the whole cell
                        // before going to the next cell.
                        if (select_whole && !empty_cell){
@@ -5152,17 +5153,17 @@ void InsetTabular::setChange(Change const & change)
 }
 
 
-void InsetTabular::acceptChanges(BufferParams const & bparams)
+void InsetTabular::acceptChanges()
 {
        for (idx_type idx = 0; idx < nargs(); ++idx)
-               cell(idx)->acceptChanges(bparams);
+               cell(idx)->acceptChanges();
 }
 
 
-void InsetTabular::rejectChanges(BufferParams const & bparams)
+void InsetTabular::rejectChanges()
 {
        for (idx_type idx = 0; idx < nargs(); ++idx)
-               cell(idx)->rejectChanges(bparams);
+               cell(idx)->rejectChanges();
 }