Fix caret height when inserting new inset

For now, the simplest thing to do it to compute metrics in all cases
before calling setCurrentFont().

In 2.5, a better approach will be to add a new virtual function
InsetText::setFont that will set correctly TextMetrics::font_ (a cache
of the reference font).

Fixes bug #12126.
This commit is contained in:
Jean-Marc Lasgouttes 2021-02-14 21:34:43 +01:00
parent 6f16319879
commit 5a58ca6576

View File

@ -2082,15 +2082,12 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
// inside it. // inside it.
doInsertInset(cur, this, cmd, true, true); doInsertInset(cur, this, cmd, true, true);
cur.posForward(); cur.posForward();
if (act == LFUN_SCRIPT_INSERT) { /* The font of the inset is computed in metrics(), and this is
/* Script insets change the font style in metrics(), and * used to compute the height of the caret (because the font
* this is used to compute the height of the caret * is stored in TextMetrics::font_). When we insert, we have
* (because the font is stored in TextMetrics::font_). * to make sure that metrics are computed so that the caret
* When we insert, we have to make sure that metrics are * height is correct. Arguably, this is hackish.*/
* computed so that the caret height is wrong. Arguably, bv->processUpdateFlags(Update::SinglePar);
* this is hackish.*/
bv->processUpdateFlags(Update::SinglePar);
}
cur.setCurrentFont(); cur.setCurrentFont();
// Some insets are numbered, others are shown in the outline pane so // Some insets are numbered, others are shown in the outline pane so
// let's update the labels and the toc backend. // let's update the labels and the toc backend.