Guard elements-panel project-open auto-select against a detached item

- ElementsPanel::addProject auto-selects the first diagram via
  setCurrentItem(qtwi_project->child(0)). When a project is opened before
  the panel's first reload() has created its title-block collection items,
  indexOfTopLevelItem(common_tbt_collection_item_) returns -1 and the
  preceding insertChild() leaves qtwi_project detached from the tree model.
- The unguarded auto-select leaves a detached/invalid current item -- an
  intermittent SIGSEGV in QTreeModel::index()/parent() on some builds; on
  current master with Qt 6.11.2 the test shows the invalid selection without
  a fault. Calling setCurrentItem() on an item the QTreeModel does not own is
  unsafe; guard the auto-select with qtwi_project->treeWidget() so it runs
  only when the item is attached.
- No behavioural change in the normal case: reload() re-adds the project
  attached shortly after and performs the selection then.
- Pre-existing since a82f6de23 ("Add highlight current page in ProjectView").

Assisted-by: Claude Code
Signed-off-by: hairykiwi <174199+hairykiwi@users.noreply.github.com>
This commit is contained in:
hairykiwi
2026-10-18 12:59:19 +01:00
parent 3b517d31c0
commit 64869810cd
+5 -3
View File
@@ -156,9 +156,11 @@ QTreeWidgetItem *ElementsPanel::addProject(QETProject *project,
if (first_add){
qtwi_project -> setExpanded(true);
// on adding an project select first diagram
setCurrentItem(qtwi_project -> child(0));
qtwi_project -> child(0)->setSelected(true);
// on adding a project select first diagram, once the project item is attached
if (qtwi_project -> treeWidget()) {
setCurrentItem(qtwi_project -> child(0));
qtwi_project -> child(0)->setSelected(true);
}
}
else {
// 2. Check whether we can restore the previous selection