}
-// this really should just insert the inset and not move the cursor.
-void Text::insertInset(Cursor & cur, Inset * inset)
+// just insert the inset and not move the cursor.
+bool Text::insertInset(Cursor & cur, Inset * inset)
{
LBUFERR(this == cur.text());
LBUFERR(inset);
- cur.paragraph().insertInset(cur.pos(), inset, cur.current_font,
+ return cur.paragraph().insertInset(cur.pos(), inset, cur.current_font,
Change(cur.buffer()->params().track_changes
? Change::INSERTED : Change::UNCHANGED));
}
InsetMathMacroTemplate * inset = new InsetMathMacroTemplate(cur.buffer(),
from_utf8(token(s, ' ', 0)), nargs, false, type);
inset->setBuffer(bv->buffer());
- insertInset(cur, inset);
-
- // enter macro inset and select the name
- cur.push(*inset);
- cur.top().pos() = cur.top().lastpos();
- cur.resetAnchor();
- cur.selection(true);
- cur.top().pos() = 0;
+ if (insertInset(cur, inset)) {
+ // If insertion is successful, enter macro inset and select the name
+ cur.push(*inset);
+ cur.top().pos() = cur.top().lastpos();
+ cur.resetAnchor();
+ cur.selection(true);
+ cur.top().pos() = 0;
+ }
}
break;
case LFUN_MATH_BIGDELIM:
case LFUN_MATH_DISPLAY:
case LFUN_MATH_MODE:
- case LFUN_MATH_MACRO:
case LFUN_MATH_SUBSCRIPT:
case LFUN_MATH_SUPERSCRIPT:
code = MATH_HULL_CODE;
break;
+ case LFUN_MATH_MACRO:
+ code = MATHMACRO_CODE;
+ break;
+
case LFUN_REGEXP_MODE:
code = MATH_HULL_CODE;
enable = cur.buffer()->isInternal() && !cur.inRegexped();
void forOutliner(docstring & os, size_t maxlen, pit_type start, pit_type end,
bool shorten = true) const;
- /// insert a character at cursor position
+ /// FIXME: investigate why those two function behave differently wrt cursor.
+ /// insert a character at cursor position and move cursor forward
/// FIXME: replace Cursor with DocIterator.
void insertChar(Cursor & cur, char_type c);
- /// insert an inset at cursor position
+ /// insert an inset at cursor position; do not move cursor
/// FIXME: replace Cursor with DocIterator.
- void insertInset(Cursor & cur, Inset * inset);
+ bool insertInset(Cursor & cur, Inset * inset);
/// try to handle that request
/// FIXME: replace Cursor with DocIterator.