get the parentparent reference before changing the nodes; this should fix a segfault in regrouping

git-svn-id: svn://svn.icculus.org/netradiant/trunk@232 61c419a2-8eb2-4b30-bcec-8cead039b335
This commit is contained in:
divverent 2009-03-27 09:21:52 +00:00
parent 03d8a175d4
commit 08732dbb75

View File

@ -185,7 +185,9 @@ public:
class EntityGroupSelected : public scene::Graph::Walker
{
NodeSmartReference group;
public:
//typedef std::pair<NodeSmartReference, NodeSmartReference> DeletionPair;
//Stack<DeletionPair> deleteme;
public:
EntityGroupSelected(const scene::Path &p): group(p.top().get())
{
}
@ -204,15 +206,25 @@ public:
NodeSmartReference child(path.top().get());
NodeSmartReference parent(path.parent().get());
if(path.size() >= 3 && parent != Map_FindOrInsertWorldspawn(g_map))
{
NodeSmartReference parentparent(path[path.size() - 3].get());
Node_getTraversable(parent)->erase(child);
Node_getTraversable(group)->insert(child);
if(Node_getTraversable(parent)->empty() && path.size() >= 3 && parent != Map_FindOrInsertWorldspawn(g_map))
if(Node_getTraversable(parent)->empty())
{
NodeSmartReference parentparent(path[path.size() - 3].get());
//deleteme.push(DeletionPair(parentparent, parent));
Node_getTraversable(parentparent)->erase(parent);
}
}
else
{
Node_getTraversable(parent)->erase(child);
Node_getTraversable(group)->insert(child);
}
}
}
}
};