pit_type prev = pit > 0 ? depthHook(pit, par.getDepth()) : pit;
if (prev < pit && cur.pos() == par.beginOfBody()
&& !par.size() && !par.isEnvSeparator(cur.pos())
+ && !par.layout().keepempty
&& !par.layout().isCommand()
&& pars_[prev].layout() != par.layout()
&& pars_[prev].layout().isEnvironment()
// inside it.
doInsertInset(cur, this, cmd, true, true);
cur.posForward();
+ if (act == LFUN_SCRIPT_INSERT) {
+ /* Script insets change the font style in metrics(), and
+ * this is used to compute the height of the caret
+ * (because the font is stored in TextMetrics::font_).
+ * When we insert, we have to make sure that metrics are
+ * computed so that the caret height is wrong. Arguably,
+ * this is hackish.*/
+ bv->processUpdateFlags(Update::SinglePar);
+ }
+ cur.setCurrentFont();
// Some insets are numbered, others are shown in the outline pane so
// let's update the labels and the toc backend.
cur.forceBufferUpdate();
// Set the freefont using the contents of \param data dispatched from
// the frontends and apply it at the current cursor location.
case LFUN_TEXTSTYLE_UPDATE: {
- Font font;
+ Font font(ignore_font, ignore_language);
bool toggle;
if (font.fromString(to_utf8(cmd.argument()), toggle)) {
docstring const props = font.stateText(&bv->buffer().params(), true);
for (DocIterator it = cur.selectionBegin(); ; it.forwardPar()) {
pos_type const beg = it.pos();
pos_type end;
- bool const in_last_par = (it.pit() == cur.selectionEnd().pit());
+ bool const in_last_par = (it.pit() == cur.selectionEnd().pit() &&
+ it.idx() == cur.selectionEnd().idx());
if (in_last_par)
end = cur.selectionEnd().pos();
else