forked from qt-creator/qt-creator
ProjectExplorer: Fix replaceSubtree for project nodes
Ensure to keep node alive as long as needed. Task-number: QTCREATORBUG-20616 Change-Id: I57a720d3e31e14bcb8388de5fef68f70db370c90 Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
This commit is contained in:
@@ -604,6 +604,7 @@ bool FolderNode::isAncesterOf(Node *n)
|
|||||||
|
|
||||||
bool FolderNode::replaceSubtree(Node *oldNode, std::unique_ptr<Node> &&newNode)
|
bool FolderNode::replaceSubtree(Node *oldNode, std::unique_ptr<Node> &&newNode)
|
||||||
{
|
{
|
||||||
|
std::unique_ptr<Node> keepAlive;
|
||||||
if (!oldNode) {
|
if (!oldNode) {
|
||||||
addNode(std::move(newNode)); // Happens e.g. when a project is registered
|
addNode(std::move(newNode)); // Happens e.g. when a project is registered
|
||||||
} else {
|
} else {
|
||||||
@@ -614,9 +615,10 @@ bool FolderNode::replaceSubtree(Node *oldNode, std::unique_ptr<Node> &&newNode)
|
|||||||
QTC_ASSERT(it != m_nodes.end(), return false);
|
QTC_ASSERT(it != m_nodes.end(), return false);
|
||||||
if (newNode) {
|
if (newNode) {
|
||||||
newNode->setParentFolderNode(this);
|
newNode->setParentFolderNode(this);
|
||||||
|
keepAlive = std::move(*it);
|
||||||
*it = std::move(newNode);
|
*it = std::move(newNode);
|
||||||
} else {
|
} else {
|
||||||
takeNode(oldNode); // Happens e.g. when project is shutting down
|
keepAlive = takeNode(oldNode); // Happens e.g. when project is shutting down
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
handleSubTreeChanged(this);
|
handleSubTreeChanged(this);
|
||||||
|
|||||||
Reference in New Issue
Block a user