main_text_ = (text_ == &buffer.text());
bool changed = false;
+ // FIXME: This check ought to be done somewhere else. It is the reason
+ // why text_ is not const. But then, where else to do it?
+ // Well, how can you end up with either (a) a biblio environment that
+ // has no InsetBibitem or (b) a biblio environment with more than one
+ // InsetBibitem? I think the answer is: when paragraphs are merged;
+ // when layout is set; when material is pasted.
+ int const moveCursor = par.checkBiblio(buffer);
+ if (moveCursor > 0)
+ const_cast<Cursor &>(bv_->cursor()).posForward();
+ else if (moveCursor < 0) {
+ Cursor & cursor = const_cast<Cursor &>(bv_->cursor());
+ if (cursor.pos() >= -moveCursor)
+ cursor.posBackward();
+ }
+
// Optimisation: this is used in the next two loops
// so better to calculate that once here.
int const right_margin = rightMargin(pm);
BufferView * bv = current_view_->currentBufferView();
if (bv) {
- Cursor & cursor = bv->cursor();
- Buffer & buf = bv->buffer();
-
- // FIXME
- // This check out to be done somewhere else. It got moved here
- // from TextMetrics.cpp, where it definitely didn't need to be.
- // Actually, this test ought not to be done at all, since the
- // whole InsetBibitem business is a mess. But that is a different
- // story.
- int moveCursor = 0;
- if (cursor.inTexted()) {
- moveCursor = cursor.paragraph().checkBiblio(buf);
- if (moveCursor > 0)
- cursor.posForward();
- else if (moveCursor < 0 && cursor.pos() >= -moveCursor)
- cursor.posBackward();
- }
- if (moveCursor != 0 || dr.needBufferUpdate()) {
- cursor.clearBufferUpdate();
- buf.updateBuffer();
+ if (dr.needBufferUpdate()) {
+ bv->cursor().clearBufferUpdate();
+ bv->buffer().updateBuffer();
}
// BufferView::update() updates the ViewMetricsInfo and
// also initializes the position cache for all insets in