From d5394a47b9084264db3ef52adbc9633b91d0a661 Mon Sep 17 00:00:00 2001
From: Marco Biasini <marco.biasini@unibas.ch>
Date: Sun, 27 Oct 2013 10:54:37 +0100
Subject: [PATCH] fix removal of multiple nodes at once

---
 modules/gfx/src/scene.cc                     | 1 -
 modules/gui/src/scene_win/scene_node.cc      | 4 ++--
 modules/gui/src/scene_win/scene_win_model.cc | 9 +++++----
 3 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/modules/gfx/src/scene.cc b/modules/gfx/src/scene.cc
index e9025cd39..5c1e9cbb7 100644
--- a/modules/gfx/src/scene.cc
+++ b/modules/gfx/src/scene.cc
@@ -1043,7 +1043,6 @@ void Scene::Remove(const GfxNodeP& go)
   if(!go) return;
   root_node_->Remove(go);
   this->NotifyObservers(bind(&SceneObserver::NodeRemoved, _1,go));
-  std::cerr << "Scene::Remove(node):" << go.use_count() << std::endl;
 }
 
 void Scene::RemoveAll()
diff --git a/modules/gui/src/scene_win/scene_node.cc b/modules/gui/src/scene_win/scene_node.cc
index 70818d1ac..3e99b51cc 100644
--- a/modules/gui/src/scene_win/scene_node.cc
+++ b/modules/gui/src/scene_win/scene_node.cc
@@ -29,7 +29,7 @@ SceneNode::SceneNode(QObject* parent):QObject(parent){
   parent_ = NULL;
 }
 
-int SceneNode::GetChildRow(const SceneNode* node) const{
+int SceneNode::GetChildRow(const SceneNode* node) const {
   for(int i = 0; i < this->children().size(); i++){
     if (this->children()[i] == node)
       return i;
@@ -41,7 +41,7 @@ SceneNode::~SceneNode() {
 }
 
 int SceneNode::GetRow() const{
-  if(parent_){
+  if (parent_) {
     return parent_->GetChildRow(this);
   }
   return 0;
diff --git a/modules/gui/src/scene_win/scene_win_model.cc b/modules/gui/src/scene_win/scene_win_model.cc
index f712174f2..4fc10d492 100644
--- a/modules/gui/src/scene_win/scene_win_model.cc
+++ b/modules/gui/src/scene_win/scene_win_model.cc
@@ -123,9 +123,11 @@ QModelIndex SceneWinModel::index(int row, int col,
 
 QModelIndex SceneWinModel::parent(const QModelIndex& index) const
 {
-  if(!index.isValid())return QModelIndex();
-
+  if(!index.isValid())
+    return QModelIndex();
   SceneNode* node = GetItem(index);
+  if (!node)
+    return QModelIndex();
   assert(node);
   SceneNode* parent_node = node->GetParent();
 
@@ -302,9 +304,8 @@ bool SceneWinModel::RemoveNode(SceneNode* node)
     QModelIndex parent_index =this->GetIndexOf(parent);
     int row = node->GetRow();
     this->beginRemoveRows(parent_index,row,row);
-    this->endRemoveRows();
-    node->setParent(NULL);
     delete node;
+    this->endRemoveRows();
     return true;
   }
   return false;
-- 
GitLab