Skip to content

Commit 3b4b631

Browse files
authored
Fix crash double root to base node (#5460)
* Inform that rows are about to be deleted * Select item after conversion * Update changelog-r2023.md
1 parent 590577e commit 3b4b631

File tree

2 files changed

+9
-2
lines changed

2 files changed

+9
-2
lines changed

docs/reference/changelog-r2023.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ Released on December, 12th, 2022.
2222
- Fixed wrong warnings due to SFNode empty flag in the controller ([#5430](https://github.com/cyberbotics/webots/pull/5430)).
2323
- Fixed processing concatenated messages in default robot window JS code ([#5442](https://github.com/cyberbotics/webots/pull/5442)).
2424
- Fixed missing check on required PROTO header ([#5453](https://github.com/cyberbotics/webots/pull/5453)).
25+
- Fixed a crash when converting certain PROTOs to base node ([#5460](https://github.com/cyberbotics/webots/pull/5460)).
26+
- Fixed the item selection in the scene tree after a conversion to base node ([#5460](https://github.com/cyberbotics/webots/pull/5460)).
2527
- Cleanup
2628
- Removed deprecated `windowPosition`, `pixelSize`, `type`, `colorNoise` fields of [Camera](camera.md) node ([#5266](https://github.com/cyberbotics/webots/pull/5266)).
2729
- Dependency Updates

src/webots/scene_tree/WbSceneTree.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -766,7 +766,9 @@ void WbSceneTree::convertProtoToBaseNode(bool rootOnly) {
766766
// PROTO will be regenerated after importing the converted node
767767
parentField->blockSignals(true);
768768
// remove previous node
769+
mRowsAreAboutToBeRemoved = true;
769770
WbNodeOperations::instance()->deleteNode(currentNode);
771+
mRowsAreAboutToBeRemoved = false;
770772
if (skipTemplateRegeneration)
771773
parentField->blockSignals(false);
772774

@@ -793,10 +795,13 @@ void WbSceneTree::convertProtoToBaseNode(bool rootOnly) {
793795
if (WbNodeOperations::instance()->importNode(parentNode, parentField, index, WbNodeOperations::DEFAULT, nodeString) ==
794796
WbNodeOperations::SUCCESS) {
795797
WbNode *node = NULL;
796-
if (parentField->type() == WB_SF_NODE)
798+
if (parentField->type() == WB_SF_NODE) {
797799
node = static_cast<WbSFNode *>(parentField->value())->value();
798-
else if (parentField->type() == WB_MF_NODE)
800+
mTreeView->setCurrentIndex(mModel->findModelIndexFromNode(node));
801+
} else if (parentField->type() == WB_MF_NODE) {
799802
node = static_cast<WbMFNode *>(parentField->value())->item(index);
803+
mTreeView->setCurrentIndex(mModel->findModelIndexFromNode(node));
804+
}
800805
if (isFollowedNode)
801806
viewpoint->startFollowUp(dynamic_cast<WbSolid *>(node), true);
802807
}

0 commit comments

Comments
 (0)