Author: rgheck
Date: Fri May 27 22:40:43 2011
New Revision: 38861
URL: http://www.lyx.org/trac/changeset/38861
Log:
Backport fix for bug #7572.
Modified:
lyx-devel/branches/BRANCH_2_0_X/src/BufferView.cpp
lyx-devel/branches/BRANCH_2_0_X/src/frontends/qt4/GuiView.cpp
Modified: lyx-devel/branches/BRANCH_2_0_X/src/BufferView.cpp
==============================================================================
--- lyx-devel/branches/BRANCH_2_0_X/src/BufferView.cpp Fri May 27 22:39:58
2011 (r38860)
+++ lyx-devel/branches/BRANCH_2_0_X/src/BufferView.cpp Fri May 27 22:40:43
2011 (r38861)
@@ -2188,16 +2188,40 @@
void BufferView::setCursorFromRow(int row)
{
- int tmpid = -1;
- int tmppos = -1;
+ int tmpid;
+ int tmppos;
+ pit_type newpit = 0;
+ pos_type newpos = 0;
buffer_.texrow().getIdFromRow(row, tmpid, tmppos);
+ bool posvalid = (tmpid != -1);
+ if (posvalid) {
+ // we need to make sure that the row and position
+ // we got back are valid, because the buffer may well
+ // have changed since we last generated the LaTeX.
+ DocIterator const dit = buffer_.getParFromID(tmpid);
+ if (dit == doc_iterator_end(&buffer_))
+ posvalid = false;
+ else {
+ newpit = dit.pit();
+ // now have to check pos.
+ newpos = tmppos;
+ Paragraph const & par = buffer_.text().getPar(newpit);
+ if (newpos > par.size()) {
+ LYXERR0("Requested position no longer valid.");
+ newpos = par.size() - 1;
+ }
+ }
+ }
+ if (!posvalid) {
+ frontend::Alert::error(_("Inverse Search Failed"),
+ _("Invalid position requested by inverse search.\n"
+ "You need to update the viewed document."));
+ return;
+ }
d->cursor_.reset();
- if (tmpid == -1)
- buffer_.text().setCursor(d->cursor_, 0, 0);
- else
- buffer_.text().setCursor(d->cursor_,
buffer_.getParFromID(tmpid).pit(), tmppos);
+ buffer_.text().setCursor(d->cursor_, newpit, newpos);
d->cursor_.setSelection(false);
d->cursor_.resetAnchor();
recenter();
Modified: lyx-devel/branches/BRANCH_2_0_X/src/frontends/qt4/GuiView.cpp
==============================================================================
--- lyx-devel/branches/BRANCH_2_0_X/src/frontends/qt4/GuiView.cpp Fri May
27 22:39:58 2011 (r38860)
+++ lyx-devel/branches/BRANCH_2_0_X/src/frontends/qt4/GuiView.cpp Fri May
27 22:40:43 2011 (r38861)
@@ -2930,6 +2930,13 @@
return false;
}
}
+ if (!buf) {
+ message(bformat(
+ _("No buffer for file `%1$s'."),
+ makeDisplayPath(file_name))
+ );
+ return false;
+ }
setBuffer(buf);
documentBufferView()->setCursorFromRow(row);
return true;