Fix bugs #7110 and #7160 by reverting r36521.

This was an attempt to fix #2743 without re-working the InsetBibitem
mess. It didn't work, so we have to do that.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@38702 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Richard Heck 2011-05-11 12:44:39 +00:00
parent b44fe8b74b
commit 88cdfb0d42
2 changed files with 18 additions and 20 deletions

View File

@ -375,6 +375,21 @@ bool TextMetrics::redoParagraph(pit_type const pit)
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);

View File

@ -1103,26 +1103,9 @@ void GuiApplication::dispatch(FuncRequest const & cmd)
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