>>>>> "Joost" == Joost Verburg <[EMAIL PROTECTED]> writes:
Joost> Jean-Marc Lasgouttes wrote: >> I committed the cutSelection part (see cutsel.diff). The remaining >> part is attached. Note that I changed the font-changing stuff to >> use a temporary cursor so that there is no need to restore the >> original selection. Does that seem reasonable? Joost> Yes. No crashes or weird behavior anymore. OK, I applied tablefont.diff (below) and all that remains is the paste part. I did not apply it yet because I am not sure it is the right patch (resets cursor). Is it really important? JMarc
Index: src/insets/insettabular.C =================================================================== --- src/insets/insettabular.C (revision 15096) +++ src/insets/insettabular.C (working copy) @@ -728,27 +728,22 @@ void InsetTabular::doDispatch(LCursor & row_type rs, re; col_type cs, ce; getSelection(cur, rs, re, cs, ce); + LCursor tmpcur = cur; for (row_type i = rs; i <= re; ++i) { for (col_type j = cs; j <= ce; ++j) { // cursor follows cell: - cur.idx() = tabular.getCellNumber(i, j); + tmpcur.idx() = tabular.getCellNumber(i, j); // select this cell only: - cur.pos() = 0; - cur.resetAnchor(); - cur.pos() = cur.top().lastpos(); - cur.setCursor(cur); - cur.setSelection(); - cell(cur.idx())->dispatch(cur, cmd); + tmpcur.pit() = 0; + tmpcur.pos() = 0; + tmpcur.resetAnchor(); + tmpcur.pit() = tmpcur.lastpit(); + tmpcur.pos() = tmpcur.top().lastpos(); + tmpcur.setCursor(tmpcur); + tmpcur.setSelection(); + cell(tmpcur.idx())->dispatch(tmpcur, cmd); } } - // Restore original selection - cur.idx() = tabular.getCellNumber(rs, cs); - cur.pos() = 0; - cur.resetAnchor(); - cur.idx() = tabular.getCellNumber(re, ce); - cur.pos() = cur.top().lastpos(); - cur.setCursor(cur); - cur.setSelection(); break; } else { cell(cur.idx())->dispatch(cur, cmd);
Index: src/insets/insettabular.C =================================================================== --- src/insets/insettabular.C (revision 15086) +++ src/insets/insettabular.C (working copy) @@ -684,7 +684,10 @@ void InsetTabular::doDispatch(LCursor & if (insertAsciiString(cur.bv(), clip, false)) { // content has been replaced, // so cursor might be invalid - cur.pos() = cur.lastpos(); + if (cur.pit() > cur.lastpit()) + cur.pit() = cur.lastpit(); + if (cur.pos() > cur.lastpos()) + cur.pos() = cur.lastpos(); bvcur.setCursor(cur); break; }