X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fclient%2Ftreemodel.cpp;h=3b18d036565ce071130e7aa82169a7f08fee26f1;hb=4a174a228d64ab906a0944f3de3dfe4324d058ff;hp=4fd26873fc95ba894ad6cc6de0991ef175ae2974;hpb=197cf9c0d5e227dd475124515f6e6005cf87ac8e;p=quassel.git diff --git a/src/client/treemodel.cpp b/src/client/treemodel.cpp index 4fd26873..3b18d036 100644 --- a/src/client/treemodel.cpp +++ b/src/client/treemodel.cpp @@ -57,13 +57,13 @@ bool AbstractTreeItem::newChilds(const QList &items) { } bool AbstractTreeItem::removeChild(int row) { - if(childCount() <= row) + if(row < 0 || childCount() <= row) return false; child(row)->removeAllChilds(); emit beginRemoveChilds(row, row); AbstractTreeItem *treeitem = _childItems.takeAt(row); - treeitem->deleteLater(); + delete treeitem; emit endRemoveChilds(); checkForDeletion(); @@ -84,6 +84,7 @@ void AbstractTreeItem::removeAllChilds() { childIter = _childItems.begin(); while(childIter != _childItems.end()) { child = *childIter; + child->setTreeItemFlags(0); // disable self deletion, as this would only fuck up consitency and the child gets deleted anyways child->removeAllChilds(); childIter++; } @@ -93,7 +94,7 @@ void AbstractTreeItem::removeAllChilds() { while(childIter != _childItems.end()) { child = *childIter; childIter = _childItems.erase(childIter); - child->deleteLater(); + delete child; } emit endRemoveChilds(); @@ -116,14 +117,16 @@ bool AbstractTreeItem::reParent(AbstractTreeItem *newParent) { parent()->_childItems.removeAt(oldRow); emit parent()->endRemoveChilds(); - parent()->checkForDeletion(); - + AbstractTreeItem *oldParent = parent(); setParent(newParent); bool success = newParent->newChild(this); if(!success) qWarning() << "AbstractTreeItem::reParent(): failed to attach to new parent after removing from old parent! this:" << this << "new parent:" << newParent; + if(oldParent) + oldParent->checkForDeletion(); + return success; }