} else if (token == "\\strikeout") {
lex.next();
font.fontInfo().setStrikeout(setLyXMisc(lex.getString()));
+ } else if (token == "\\xout") {
+ lex.next();
+ font.fontInfo().setXout(setLyXMisc(lex.getString()));
} else if (token == "\\uuline") {
lex.next();
font.fontInfo().setUuline(setLyXMisc(lex.getString()));
cur.recordUndoInset();
cur.setMark(false);
cur.selHandle(false);
- // save position
+ // save position inside inset
pos_type spos = cur.pos();
pit_type spit = cur.pit();
ParagraphList plist;
if (cur.lastpit() != 0 || cur.lastpos() != 0)
plist = paragraphs();
cur.popBackward();
- // store cursor offset
+ // update cursor offset
if (spit == 0)
spos += cur.pos();
spit += cur.pit();
- Buffer & b = *cur.buffer();
- cur.paragraph().eraseChar(cur.pos(), b.params().track_changes);
+ // remember position outside inset to delete inset later
+ // we do not do it now to avoid memory reuse issues (see #10667).
+ DocIterator inset_it = cur;
+ // jump over inset
+ ++cur.pos();
+ Buffer & b = *cur.buffer();
if (!plist.empty()) {
// see bug 7319
// we clear the cache so that we won't get conflicts with labels
pasteParagraphList(cur, plist, b.params().documentClassPtr(),
b.errorList("Paste"));
- // restore position
- cur.pit() = min(cur.lastpit(), spit);
- cur.pos() = min(cur.lastpos(), spos);
}
- cur.forceBufferUpdate();
+ // delete the inset now
+ inset_it.paragraph().eraseChar(inset_it.pos(), b.params().track_changes);
+ // restore position
+ cur.pit() = min(cur.lastpit(), spit);
+ cur.pos() = min(cur.lastpos(), spos);
// Ensure the current language is set correctly (bug 6292)
cur.text()->setCursor(cur, cur.pit(), cur.pos());
cur.clearSelection();
cur.resetAnchor();
+ cur.forceBufferUpdate();
+
return true;
}