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 class EntityGroupSelected : public scene::Graph::Walker
{ {
NodeSmartReference group; NodeSmartReference group;
public: //typedef std::pair<NodeSmartReference, NodeSmartReference> DeletionPair;
//Stack<DeletionPair> deleteme;
public:
EntityGroupSelected(const scene::Path &p): group(p.top().get()) EntityGroupSelected(const scene::Path &p): group(p.top().get())
{ {
} }
@ -204,15 +206,25 @@ public:
NodeSmartReference child(path.top().get()); NodeSmartReference child(path.top().get());
NodeSmartReference parent(path.parent().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(parent)->erase(child);
Node_getTraversable(group)->insert(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); Node_getTraversable(parentparent)->erase(parent);
} }
} }
else
{
Node_getTraversable(parent)->erase(child);
Node_getTraversable(group)->insert(child);
}
}
} }
} }
}; };