From: Jean-Marc Lasgouttes Date: Wed, 3 Oct 2018 08:39:09 +0000 (+0200) Subject: Make sure inset buffer is correctly set in math grid X-Git-Tag: 2.3.3~126 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=ebe6612e;p=features.git 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) --- diff --git a/src/mathed/InsetMathGrid.cpp b/src/mathed/InsetMathGrid.cpp index 71bcf84fed..f0152854e5 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 4b19c3ce09..63fa74a87e 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 4bf7059a84..53a86d7ec8 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 1b9d8edcbc..6224e91ea1 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