case LFUN_SCREEN_SHOW_CURSOR:
case LFUN_BIBTEX_DATABASE_ADD:
case LFUN_BIBTEX_DATABASE_DEL:
- case LFUN_NOTES_MUTATE:
case LFUN_ALL_INSETS_TOGGLE:
case LFUN_STATISTICS:
case LFUN_BRANCH_ADD_INSERT:
break;
}
- case LFUN_NEXT_INSET_MODIFY: {
- // this is the real function we want to invoke
- FuncRequest tmpcmd = cmd;
- tmpcmd.action = LFUN_INSET_MODIFY;
- // if there is an inset at cursor, see whether it
- // handles the lfun, other start from scratch
- Inset * inset = cur.nextInset();
- if (!inset || !inset->getStatus(cur, tmpcmd, flag))
- flag = lyx::getStatus(tmpcmd);
- break;
- }
-
case LFUN_LABEL_GOTO: {
flag.setEnabled(!cmd.argument().empty()
|| getInsetByCode<InsetRef>(cur, REF_CODE));
break;
}
- case LFUN_NEXT_INSET_MODIFY: {
- // create the the real function we want to invoke
- FuncRequest tmpcmd = cmd;
- tmpcmd.action = LFUN_INSET_MODIFY;
- // if there is an inset at cursor, see whether it
- // can be modified.
- Inset * inset = cur.nextInset();
- if (inset) {
- cur.recordUndo();
- inset->dispatch(cur, tmpcmd);
- }
- // if it did not work, try the underlying inset.
- if (!inset || !cur.result().dispatched()) {
- cur.recordUndo();
- cur.dispatch(tmpcmd);
- }
-
- if (!cur.result().dispatched())
- // It did not work too; no action needed.
- break;
- cur.clearSelection();
- processUpdateFlags(Update::Force | Update::FitCursor);
- break;
- }
-
case LFUN_SCREEN_UP:
case LFUN_SCREEN_DOWN: {
Point p = getPos(cur, cur.boundary());
break;
}
- // This could be rewriten using some command like forall <insetname> <command>
- // once the insets refactoring is done.
- case LFUN_NOTES_MUTATE: {
- if (cmd.argument().empty())
- break;
-
- if (mutateNotes(cur, cmd.getArg(0), cmd.getArg(1))) {
- processUpdateFlags(Update::Force);
- }
- break;
- }
-
// This would be in Buffer class if only Cursor did not
// require a bufferview
FuncRequest const fr = lyxaction.lookupFunc(commandstr);
// an arbitrary number to limit number of iterations
- const int max_iter = 1000;
+ const int max_iter = 10000;
int iterations = 0;
Cursor & cur = d->cursor_;
+ Cursor const savecur = cur;
cur.reset();
if (!cur.nextInset())
cur.forwardInset();
cur.forwardInset();
}
cur.endUndoGroup();
- cur.reset();
+ cur = savecur;
+ cur.fixIfBroken();
processUpdateFlags(Update::Force);
if (iterations >= max_iter)