diff --git a/kdevplatform/language/classmodel/classmodel.h b/kdevplatform/language/classmodel/classmodel.h --- a/kdevplatform/language/classmodel/classmodel.h +++ b/kdevplatform/language/classmodel/classmodel.h @@ -65,7 +65,8 @@ virtual void nodesLayoutAboutToBeChanged(ClassModelNodes::Node* a_parent) = 0; virtual void nodesLayoutChanged(ClassModelNodes::Node* a_parent) = 0; - virtual void nodesRemoved(ClassModelNodes::Node* a_parent, int a_first, int a_last) = 0; + virtual void nodesAboutToBeRemoved(ClassModelNodes::Node* a_parent, int a_first, int a_last) = 0; + virtual void nodesRemoved(ClassModelNodes::Node* a_parent) = 0; virtual void nodesAboutToBeAdded(ClassModelNodes::Node* a_parent, int a_pos, int a_size) = 0; virtual void nodesAdded(ClassModelNodes::Node* a_parent) = 0; virtual Features features() const = 0; @@ -112,7 +113,8 @@ private: // NodesModelInterface overrides void nodesLayoutAboutToBeChanged(ClassModelNodes::Node* a_parent) override; void nodesLayoutChanged(ClassModelNodes::Node* a_parent) override; - void nodesRemoved(ClassModelNodes::Node* a_parent, int a_first, int a_last) override; + void nodesAboutToBeRemoved(ClassModelNodes::Node* a_parent, int a_first, int a_last) override; + void nodesRemoved(ClassModelNodes::Node* a_parent) override; void nodesAboutToBeAdded(ClassModelNodes::Node* a_parent, int a_pos, int a_size) override; void nodesAdded(ClassModelNodes::Node* a_parent) override; diff --git a/kdevplatform/language/classmodel/classmodel.cpp b/kdevplatform/language/classmodel/classmodel.cpp --- a/kdevplatform/language/classmodel/classmodel.cpp +++ b/kdevplatform/language/classmodel/classmodel.cpp @@ -244,9 +244,13 @@ emit layoutChanged(); } -void ClassModel::nodesRemoved(ClassModelNodes::Node* a_parent, int a_first, int a_last) +void ClassModel::nodesAboutToBeRemoved(ClassModelNodes::Node* a_parent, int a_first, int a_last) { beginRemoveRows(index(a_parent), a_first, a_last); +} + +void ClassModel::nodesRemoved(ClassModelNodes::Node*) +{ endRemoveRows(); } diff --git a/kdevplatform/language/classmodel/classmodelnode.cpp b/kdevplatform/language/classmodel/classmodelnode.cpp --- a/kdevplatform/language/classmodel/classmodelnode.cpp +++ b/kdevplatform/language/classmodel/classmodelnode.cpp @@ -453,9 +453,11 @@ { // Notify the model about the removal of this nodes' children. if ( !m_children.empty() && m_model ) - m_model->nodesRemoved(this, 0, m_children.size()-1); - - clear(); + { + m_model->nodesAboutToBeRemoved(this, 0, m_children.size()-1); + clear(); + m_model->nodesRemoved(this); + } } @@ -478,9 +480,10 @@ void Node::removeNode(Node* a_child) { int row = a_child->row(); + m_model->nodesAboutToBeRemoved(this, row, row); m_children.removeAt(row); - m_model->nodesRemoved(this, row, row ); delete a_child; + m_model->nodesRemoved(this); } // Sort algorithm for the nodes. @@ -564,11 +567,13 @@ if ( !m_children.empty() ) { // Notify model for this node. - m_model->nodesRemoved(this, 0, m_children.size()-1); - } + m_model->nodesAboutToBeRemoved(this, 0, m_children.size()-1); + + // Clear sub-nodes. + clear(); - // Clear sub-nodes. - clear(); + m_model->nodesRemoved(this); + } // This shouldn't be called from clear since clear is called also from the d-tor // and the function is virtual.