From 0c77174406230fd1c664634bd05e82c6511aa0bc Mon Sep 17 00:00:00 2001 From: Juergen Spitzmueller Date: Tue, 30 Jul 2024 09:24:19 +0200 Subject: [PATCH] fixup REFERENCE_TO_PARAGRAPH: * par id actually can be 0 * properly move on in the buffer list if paragraph is not found in the current buffer * use dit to get label (as this might be in a different buffer) (cherry picked from commit 4ed822925f03f197afa738e6e0ee07aa7b303986) --- src/BufferView.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/BufferView.cpp b/src/BufferView.cpp index 8d208e4f33..6f339e51e1 100644 --- a/src/BufferView.cpp +++ b/src/BufferView.cpp @@ -1284,7 +1284,7 @@ bool BufferView::getStatus(FuncRequest const & cmd, FuncStatus & flag) case LFUN_REFERENCE_TO_PARAGRAPH: { int const id = convert(cmd.getArg(0)); - flag.setEnabled(id > 0); + flag.setEnabled(id >= 0); break; } @@ -1649,13 +1649,18 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr) case LFUN_REFERENCE_TO_PARAGRAPH: { int const id = convert(cmd.getArg(0)); - if (id < 1) + if (id < 0) break; string const type = cmd.getArg(1); int i = 0; for (Buffer * b = &buffer_; i == 0 || b != &buffer_; b = theBufferList().next(b)) { DocIterator const dit = b->getParFromID(id); + if (dit.empty()) { + LYXERR(Debug::INFO, "No matching paragraph found! [" << id << "]."); + ++i; + continue; + } string const label = dit.innerParagraph().getLabelForXRef(); if (!label.empty()) { // if the paragraph has a label, we refer to this @@ -1670,7 +1675,7 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr) // we do not want to open the dialog, hence we // do not employ LFUN_LABEL_INSERT InsetCommandParams p(LABEL_CODE); - docstring const label = cur.getPossibleLabel(); + docstring const label = dit.getPossibleLabel(); p["name"] = label; string const data = InsetCommand::params2string(p); lyx::dispatch(FuncRequest(LFUN_INSET_INSERT, data));