[LyX/master] fixup REFERENCE_TO_PARAGRAPH:

Juergen Spitzmueller spitz at lyx.org
Tue Jul 30 10:41:11 UTC 2024


commit 4ed822925f03f197afa738e6e0ee07aa7b303986
Author: Juergen Spitzmueller <spitz at lyx.org>
Date:   Tue Jul 30 09:24:19 2024 +0200

    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)
---
 src/BufferView.cpp | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/src/BufferView.cpp b/src/BufferView.cpp
index f3267d75d3..19f98554fe 100644
--- a/src/BufferView.cpp
+++ b/src/BufferView.cpp
@@ -1294,7 +1294,7 @@ bool BufferView::getStatus(FuncRequest const & cmd, FuncStatus & flag)
 
 	case LFUN_REFERENCE_TO_PARAGRAPH: {
 		int const id = convert<int>(cmd.getArg(0));
-		flag.setEnabled(id > 0);
+		flag.setEnabled(id >= 0);
 		break;
 	}
 
@@ -1659,13 +1659,18 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
 
 	case LFUN_REFERENCE_TO_PARAGRAPH: {
 		int const id = convert<int>(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
@@ -1680,7 +1685,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));


More information about the lyx-cvs mailing list