if (flags == Update::Decoration) {
d->update_strategy_ = DecorationUpdate;
- buffer_.changed();
+ buffer_.changed(false);
return;
}
}
if (flags & Update::Decoration) {
d->update_strategy_ = DecorationUpdate;
- buffer_.changed();
+ buffer_.changed(false);
return;
}
// no screen update is needed.
if (!(flags & Update::FitCursor)) {
// Nothing to do anymore. Trigger a redraw and return
- buffer_.changed();
+ buffer_.changed(false);
return;
}
// updateMetrics() does not update paragraph position
// This is done at draw() time. So we need a redraw!
- buffer_.changed();
+ buffer_.changed(false);
if (fitCursor()) {
// The cursor is off screen so ensure it is visible.
// If the offset is less than 2 screen height, prefer to scroll instead.
if (abs(offset) <= 2 * height_) {
d->anchor_ypos_ -= offset;
- updateMetrics();
- buffer_.changed();
+ buffer_.changed(true);
return;
}
// To center the screen on this new position we need the
// paragraph position which is computed at draw() time.
// So we need a redraw!
- buffer_.changed();
+ buffer_.changed(false);
if (fitCursor())
showCursor();
}
void BufferView::showCursor(DocIterator const & dit, bool recenter)
{
if (scrollToCursor(dit, recenter))
- buffer_.changed();
+ buffer_.changed(false);
}
break;
}
- case LFUN_WORD_FINDADV:
- findAdv(this, cmd);
+ case LFUN_WORD_FINDADV: {
+ FindAndReplaceOptions opt;
+ istringstream iss(to_utf8(cmd.argument()));
+ iss >> opt;
+ if (findAdv(this, opt))
+ cur.dispatched();
+ else
+ cur.undispatched();
break;
+ }
case LFUN_MARK_OFF:
cur.clearSelection();
Cursor old = cur;
bool const in_texted = cur.inTexted();
cur.reset();
- updateMetrics();
- buffer_.changed();
+ buffer_.changed(true);
d->text_metrics_[&buffer_.text()].editXY(cur, p.x_, p.y_,
true, cmd.action == LFUN_SCREEN_UP);
//FIXME: what to do with cur.x_target()?
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)
- cur.errorMessage(bformat(_("inset-forall interrupted because number of actions is larger than %1$s"), max_iter));
+ cur.errorMessage(bformat(_("`inset-forall' interrupted because number of actions is larger than %1$d"), max_iter));
else
cur.message(bformat(_("Applied \"%1$s\" to %2$d insets"), from_utf8(commandstr), iterations));
break;
d->xsel_cache_.set = false;
// The buffer did not really change, but this causes the
// redraw we need because we cleared the selection above.
- buffer_.changed();
+ buffer_.changed(false);
}
// This event (moving without mouse click) is not passed further.
// This should be changed if it is further utilized.
- buffer_.changed();
+ buffer_.changed(false);
return;
}
if (scroll_value)
scroll(scroll_step * scroll_value);
}
- updateMetrics();
- buffer_.changed();
+ buffer_.changed(true);
}
d->cursor_ = cur;
buffer_.updateLabels();
-
- updateMetrics();
- buffer_.changed();
+ buffer_.changed(true);
return true;
}
res = _("Could not insert document %1$s");
}
- updateMetrics();
- buffer_.changed();
+ buffer_.changed(true);
// emit message signal.
message(bformat(res, disp_fn));
buffer_.errors("Parse");
else
cur.innerText()->insertStringAsLines(cur, tmpstr, cur.current_font);
- updateMetrics();
- buffer_.changed();
+ buffer_.changed(true);
}