commit ebe6612e2661f49dcfae6103f056c27afd47751f
Author: Jean-Marc Lasgouttes <lasgout...@lyx.org>
Date:   Wed Oct 3 10:39:09 2018 +0200

    Make sure inset buffer is correctly set in math grid
    
    Make MathData::setBuffer set the buffer of insets that it contains.
    Remove corresponding code from InsetMathNest.
    
    update the buffer() property in the following tabular-feature
    actions : copy-row, add-row, copy-col, add-col.
    
    (cherry picked from commit 837bcbb0433316ebe528b71e7c9952638ac1baee)
---
 src/mathed/InsetMathGrid.cpp |   14 +++++++++++---
 src/mathed/InsetMathNest.cpp |    7 ++-----
 src/mathed/MathData.cpp      |    8 ++++++++
 src/mathed/MathData.h        |    2 +-
 4 files changed, 22 insertions(+), 9 deletions(-)

diff --git a/src/mathed/InsetMathGrid.cpp b/src/mathed/InsetMathGrid.cpp
index 71bcf84..f015285 100644
--- a/src/mathed/InsetMathGrid.cpp
+++ b/src/mathed/InsetMathGrid.cpp
@@ -809,7 +809,7 @@ void InsetMathGrid::addRow(row_type row)
 {
        rowinfo_.insert(rowinfo_.begin() + row + 1, RowInfo());
        cells_.insert
-               (cells_.begin() + (row + 1) * ncols(), ncols(), MathData());
+               (cells_.begin() + (row + 1) * ncols(), ncols(), 
MathData(buffer_));
        cellinfo_.insert
                (cellinfo_.begin() + (row + 1) * ncols(), ncols(), CellInfo());
 }
@@ -833,8 +833,11 @@ void InsetMathGrid::delRow(row_type row)
 void InsetMathGrid::copyRow(row_type row)
 {
        addRow(row);
-       for (col_type col = 0; col < ncols(); ++col)
+       for (col_type col = 0; col < ncols(); ++col) {
                cells_[(row + 1) * ncols() + col] = cells_[row * ncols() + col];
+               // copying the cell does not set the buffer
+               cells_[(row + 1) * ncols() + col].setBuffer(*buffer_);
+       }
 }
 
 
@@ -864,6 +867,8 @@ void InsetMathGrid::addCol(col_type newcol)
                                = cellinfo_[row * nc + col];
                }
        swap(cells_, new_cells);
+       // copying cells loses the buffer reference
+       setBuffer(*buffer_);
        swap(cellinfo_, new_cellinfo);
 
        ColInfo inf;
@@ -895,8 +900,11 @@ void InsetMathGrid::delCol(col_type col)
 void InsetMathGrid::copyCol(col_type col)
 {
        addCol(col+1);
-       for (row_type row = 0; row < nrows(); ++row)
+       for (row_type row = 0; row < nrows(); ++row) {
                cells_[row * ncols() + col + 1] = cells_[row * ncols() + col];
+               // copying the cell does not set the buffer
+               cells_[row * ncols() + col + 1].setBuffer(*buffer_);
+       }
 }
 
 
diff --git a/src/mathed/InsetMathNest.cpp b/src/mathed/InsetMathNest.cpp
index 4b19c3c..63fa74a 100644
--- a/src/mathed/InsetMathNest.cpp
+++ b/src/mathed/InsetMathNest.cpp
@@ -118,11 +118,8 @@ InsetMathNest & InsetMathNest::operator=(InsetMathNest 
const & inset)
 void InsetMathNest::setBuffer(Buffer & buffer)
 {
        InsetMath::setBuffer(buffer);
-       for (idx_type i = 0, n = nargs(); i != n; ++i) {
-               MathData & data = cell(i);
-               for (size_t j = 0; j != data.size(); ++j)
-                       data[j].nucleus()->setBuffer(buffer);
-       }
+       for (MathData & data : cells_)
+               data.setBuffer(buffer);
 }
 
 
diff --git a/src/mathed/MathData.cpp b/src/mathed/MathData.cpp
index 4bf7059..53a86d7 100644
--- a/src/mathed/MathData.cpp
+++ b/src/mathed/MathData.cpp
@@ -52,6 +52,14 @@ MathData::MathData(Buffer * buf, const_iterator from, 
const_iterator to)
 {}
 
 
+void MathData::setBuffer(Buffer & b)
+{
+       buffer_ = &b;
+       for (MathAtom & at : *this)
+               at.nucleus()->setBuffer(b);
+}
+
+
 MathAtom & MathData::operator[](pos_type pos)
 {
        LBUFERR(pos < size());
diff --git a/src/mathed/MathData.h b/src/mathed/MathData.h
index 1b9d8ed..6224e91 100644
--- a/src/mathed/MathData.h
+++ b/src/mathed/MathData.h
@@ -185,7 +185,7 @@ public:
        ///
        void updateBuffer(ParIterator const &, UpdateType);
        ///
-       void setBuffer(Buffer & b) { buffer_ = &b; }
+       void setBuffer(Buffer & b);
 
 protected:
        /// cached values for super/subscript placement

Reply via email to