X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2FInsetMathGrid.cpp;h=0a637ec715c26ae8f32d5bf4ab5f718de9d02385;hb=21c92c8a129b5f3ff56de33bf2941a25967cffbb;hp=1fd445995c5f66b107e8b70c7faa6da199b2e4c6;hpb=3b895bb47a69c41581415f262c9d197333941b73;p=lyx.git diff --git a/src/mathed/InsetMathGrid.cpp b/src/mathed/InsetMathGrid.cpp index 1fd445995c..0a637ec715 100644 --- a/src/mathed/InsetMathGrid.cpp +++ b/src/mathed/InsetMathGrid.cpp @@ -1624,15 +1624,16 @@ void InsetMathGrid::doDispatch(Cursor & cur, FuncRequest & cmd) } else { // multiple cells cur.recordUndoInset(); - col_type startcol = col(cur.idx()); + col_type startcol = col(cur.idx()); row_type startrow = cur.row(); - col_type const numcols = + col_type oldncols = ncols(); + col_type numcols = min(grid.ncols(), ncols() - startcol); row_type const numrows = min(grid.nrows(), nrows() - cur.row()); for (row_type r = 0; r < numrows; ++r) { for (col_type c = 0; c < numcols; ++c) { - idx_type i = index(r + cur.row(), c + col(cur.idx())); + idx_type i = index(r + startrow, c + startcol); cell(i).insert(c == 0 ? cur.pos() : 0, grid.cell(grid.index(r, c))); } @@ -1640,25 +1641,28 @@ void InsetMathGrid::doDispatch(Cursor & cur, FuncRequest & cmd) rowinfo_[r].lines += grid.rowinfo_[r].lines; else { for (unsigned int l = 0; l < grid.rowinfo_[r].lines; ++l) { - idx_type i = index(r + cur.row(), 0); + idx_type i = index(r + startrow, 0); cell(i).insert(0, MathAtom(new InsetMathUnknown(from_ascii("\\hline")))); } } // append columns for the left over horizontal cells for (InsetMath::col_type c = numcols; c < grid.ncols(); ++c) { - addCol(c + 1); - idx_type i = index(r + cur.row(), c + 1); + addCol(c + startcol); + idx_type i = index(r + startrow, min(c + startcol, ncols() - 1)); cell(i).append(grid.cell(grid.index(r, c))); + ++numcols; } } + // amend cursor position if cols have been appended + cur.idx() += startrow * (ncols() - oldncols); // append rows for the left over vertical cells idx_type i = nargs() - 1; for (row_type r = numrows; r < grid.nrows(); ++r) { row_type crow = startrow + r; addRow(crow - 1); for (col_type c = 0; c < grid.ncols(); ++c) - cell(index(crow, c + startcol)).append(grid.cell(grid.index(r, c))); + cell(index(min(crow, nrows() - 1), min(c + startcol, ncols() - 1))).append(grid.cell(grid.index(r, c))); if (hline_enabled) rowinfo_[crow].lines += grid.rowinfo_[r].lines; else {