[LyX/2.4.x] Avoid crash when InsetBibitem::updateCommand shows a dialog

Richard Kimberly Heck rikiheck at lyx.org
Tue Jul 2 19:15:38 UTC 2024


commit 1d25832edcfde1eac543a7b7b82545319d79c1e3
Author: Jean-Marc Lasgouttes <lasgouttes at lyx.org>
Date:   Tue Jul 2 14:49:34 2024 +0200

    Avoid crash when InsetBibitem::updateCommand shows a dialog
    
    This is one of the places where a dialog is shown (indicating that
    some bibtems have been renamed) while the metrics are not up to date.
    Then a draw operation can be triggered too early and a crash can ensue.
    
    Use ad-hoc solution for this case and use Buffer::setBusy(). The
    Alert::warning helper cannot really do that since it doe snot know the
    current buffer.
    
    (cherry picked from commit c84c59eaecf19b1eb8227f9aadc7f5be187b3856)
---
 ANNOUNCE                    | 2 ++
 src/insets/InsetBibitem.cpp | 2 ++
 2 files changed, 4 insertions(+)

diff --git a/ANNOUNCE b/ANNOUNCE
index 46e63fd8e9..cd49a9f1e2 100644
--- a/ANNOUNCE
+++ b/ANNOUNCE
@@ -97,6 +97,8 @@ What's new
 
 - Fix crash when deleting rows or columns from table.
 
+- Avoid crash when InsetBibitem::updateCommand shows a dialog.
+
 - Set cursor font after pasting to PassThru (e.g., ERT) inset (bug 12592).
 
 - Do not ask about unapplied changes if dialog has been closed.
diff --git a/src/insets/InsetBibitem.cpp b/src/insets/InsetBibitem.cpp
index 6336da32d4..e08a579173 100644
--- a/src/insets/InsetBibitem.cpp
+++ b/src/insets/InsetBibitem.cpp
@@ -95,9 +95,11 @@ void InsetBibitem::updateCommand(docstring const & new_key, bool)
 			++i;
 			key = new_key + '-' + convert<docstring>(i);
 		}
+		buffer().setBusy(true);
 		frontend::Alert::warning(_("Keys must be unique!"),
 			bformat(_("The key %1$s already exists,\n"
 			"it will be changed to %2$s."), new_key, key));
+		buffer().setBusy(false);
 	}
 	setParam("key", key);
 	buffer().invalidateBibinfoCache();


More information about the lyx-cvs mailing list