]> git.lyx.org Git - features.git/commitdiff
Resize table if needed on multi-cell paste
authorJuergen Spitzmueller <spitz@lyx.org>
Mon, 29 Jun 2020 15:51:24 +0000 (17:51 +0200)
committerJuergen Spitzmueller <spitz@lyx.org>
Mon, 29 Jun 2020 15:51:24 +0000 (17:51 +0200)
src/insets/InsetTabular.cpp

index 4dcb1c2bbaacb4cba263684c3ac60f250e82b164..2bfa3914b9fa8a13531d85ccb4ff81c16aba2794 100644 (file)
@@ -7107,12 +7107,15 @@ bool InsetTabular::pasteClipboard(Cursor & cur)
                getSelection(cur, actrow, re, actcol, ce);
        }
 
-       for (row_type r1 = 0, r2 = actrow;
-            r1 < paste_tabular->nrows() && r2 < tabular.nrows();
-            ++r1, ++r2) {
-               for (col_type c1 = 0, c2 = actcol;
-                   c1 < paste_tabular->ncols() && c2 < tabular.ncols();
-                   ++c1, ++c2) {
+       col_type const oldncols = tabular.ncols();
+       for (row_type r1 = 0, r2 = actrow; r1 < paste_tabular->nrows(); ++r1, ++r2) {
+               // Append rows if needed
+               if (r2 == tabular.nrows())
+                       tabular.insertRow(r2 - 1, false);
+               for (col_type c1 = 0, c2 = actcol; c1 < paste_tabular->ncols(); ++c1, ++c2) {
+                       // Append columns if needed
+                       if (c2 == tabular.ncols())
+                               tabular.insertColumn(c2 - 1, false);
                        if (paste_tabular->isPartOfMultiColumn(r1, c1) &&
                              tabular.isPartOfMultiColumn(r2, c2))
                                continue;
@@ -7140,6 +7143,8 @@ bool InsetTabular::pasteClipboard(Cursor & cur)
                        cur.pit() = 0;
                }
        }
+       // amend cursor position if cols have been appended
+       cur.idx() += actrow * (tabular.ncols() - oldncols);
        return true;
 }