[LyX/master] Amend f7e54c0bb21db

Juergen Spitzmueller <[email protected]> Mon, 20 Jul 2026 12:15:45 +0000
Newsgroups gmane.editors.lyx.cvs
Message-ID <[email protected]>
commit 34c59f426228bb593df9412aabeb83cc7ad14de0
Author: Juergen Spitzmueller <[email protected]>
Date:   Mon Jul 20 14:15:00 2026 +0200

    Amend f7e54c0bb21db
    
    Fix the real problem. Kudos to Pavel and his new spouse.
---
 src/frontends/qt/GuiDocument.cpp | 78 ++++++++++++++++++++--------------------
 1 file changed, 38 insertions(+), 40 deletions(-)

diff --git a/src/frontends/qt/GuiDocument.cpp b/src/frontends/qt/GuiDocument.cpp
index ae14c02a18..57994ae855 100644
--- a/src/frontends/qt/GuiDocument.cpp
+++ b/src/frontends/qt/GuiDocument.cpp
@@ -2988,14 +2988,18 @@ void GuiDocument::addSpecialFont()
 			}
 		}
 	} else {
-		QTreeWidgetItem * item = is_script ? new QTreeWidgetItem(fontSpecialModule->scriptFontsTW)
-						   : new QTreeWidgetItem(fontSpecialModule->langFontsTW);
+		QTreeWidgetItem * item = nullptr;
 		for (auto const & iit : items) {
 			if (iit->data(1, Qt::UserRole).toString() == "rm") {
 				item = iit;
 				break;
 			}
 		}
+		bool const newitem = !item;
+		if (newitem)
+			// no parent: not inserted yet
+			item = new QTreeWidgetItem;
+
 		item->setText(0, fontSpecialModule->specialFontScopeCO->currentText());
 		item->setData(0, Qt::UserRole, scope);
 		item->setText(1, qt_("Roman"));
@@ -3008,10 +3012,12 @@ void GuiDocument::addSpecialFont()
 		else
 			item->setCheckState(4, Qt::Unchecked);
 		item->setText(5, rmopts);
-		if (is_script)
-			specialScriptFontItems.append(item);
-		else
-			specialLangFontItems.append(item);
+		if (newitem) {
+			if (is_script)
+				specialScriptFontItems.append(item);
+			else
+				specialLangFontItems.append(item);
+		}
 	}
 	if (sffont == "default") {
 		for (auto const & iit : items) {
@@ -3026,15 +3032,18 @@ void GuiDocument::addSpecialFont()
 			}
 		}
 	} else {
-		QTreeWidgetItem * item = is_script ? new QTreeWidgetItem(fontSpecialModule->scriptFontsTW)
-						   : new QTreeWidgetItem(fontSpecialModule->langFontsTW);
-
+		QTreeWidgetItem * item = nullptr;
 		for (auto const & iit : items) {
 			if (iit->data(1, Qt::UserRole).toString() == "sf") {
 				item = iit;
 				break;
 			}
 		}
+		bool const newitem = !item;
+		if (newitem)
+			// no parent: not inserted yet
+			item = new QTreeWidgetItem;
+
 		item->setText(0, fontSpecialModule->specialFontScopeCO->currentText());
 		item->setData(0, Qt::UserRole, scope);
 		item->setText(1, qt_("Sans Serif"));
@@ -3049,10 +3058,13 @@ void GuiDocument::addSpecialFont()
 		else
 			item->setCheckState(4, Qt::Unchecked);
 		item->setText(5, sfopts);
-		if (is_script)
-			specialScriptFontItems.append(item);
-		else
-			specialLangFontItems.append(item);
+
+		if (newitem) {
+			if (is_script)
+				specialScriptFontItems.append(item);
+			else
+				specialLangFontItems.append(item);
+		}
 	}
 	if (ttfont == "default") {
 		for (auto const & iit : items) {
@@ -3067,14 +3079,18 @@ void GuiDocument::addSpecialFont()
 			}
 		}
 	} else {
-		QTreeWidgetItem * item = is_script ? new QTreeWidgetItem(fontSpecialModule->scriptFontsTW)
-						   : new QTreeWidgetItem(fontSpecialModule->langFontsTW);
+		QTreeWidgetItem * item = nullptr;
 		for (auto const & iit : items) {
 			if (iit->data(1, Qt::UserRole).toString() == "tt") {
 				item = iit;
 				break;
 			}
 		}
+		bool const newitem = !item;
+		if (newitem)
+			// no parent: not inserted yet
+			item = new QTreeWidgetItem;
+
 		item->setText(0, fontSpecialModule->specialFontScopeCO->currentText());
 		item->setData(0, Qt::UserRole, scope);
 		item->setText(1, qt_("Typewriter"));
@@ -3089,35 +3105,17 @@ void GuiDocument::addSpecialFont()
 		else
 			item->setCheckState(4, Qt::Unchecked);
 		item->setText(5, ttopts);
-		if (is_script)
-			specialScriptFontItems.append(item);
-		else
-			specialLangFontItems.append(item);
+
+		if (newitem) {
+			if (is_script)
+				specialScriptFontItems.append(item);
+			else
+				specialLangFontItems.append(item);
+		}
 	}
 	fontSpecialModule->langFontsTW->addTopLevelItems(specialLangFontItems);
 	fontSpecialModule->scriptFontsTW->addTopLevelItems(specialScriptFontItems);
 
-	// Post cleanup; for some reason, empty rows might end up in
-	// the widget.
-	// FIXME: find cause.
-	QTreeWidgetItemIterator twi(fontSpecialModule->langFontsTW);
-	while (*twi) {
-		if ((*twi)->text(0).isEmpty()) {
-			QTreeWidgetItem *item = *twi;
-			fontSpecialModule->langFontsTW->takeTopLevelItem(
-						fontSpecialModule->langFontsTW->indexOfTopLevelItem(item));
-		}
-		++twi;
-	}
-	twi = QTreeWidgetItemIterator(fontSpecialModule->scriptFontsTW);
-	while (*twi) {
-		if ((*twi)->text(0).isEmpty()) {
-			QTreeWidgetItem *item = *twi;
-			fontSpecialModule->scriptFontsTW->takeTopLevelItem(
-						fontSpecialModule->scriptFontsTW->indexOfTopLevelItem(item));
-		}
-		++twi;
-	}
 	change_adaptor();
 }
 
-- 
lyx-cvs mailing list
[email protected]
https://lists.lyx.org/mailman/listinfo/lyx-cvs