X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Ftreemodel.cpp;h=48394c5ee29c1e231f219304ba3be3b654e5198c;hp=5c23063dd3c7470d9600a827d93c70d32b94c7c0;hb=e561e02a8d2f1f009559d17c7b1c66cb6f4e2a5a;hpb=fe9ec46e2b6394b7735a73da5c438b10ba7e5e82 diff --git a/src/client/treemodel.cpp b/src/client/treemodel.cpp index 5c23063d..48394c5e 100644 --- a/src/client/treemodel.cpp +++ b/src/client/treemodel.cpp @@ -29,13 +29,11 @@ *****************************************/ AbstractTreeItem::AbstractTreeItem(AbstractTreeItem *parent) : QObject(parent), - _flags(Qt::ItemIsSelectable | Qt::ItemIsEnabled) + _flags(Qt::ItemIsSelectable | Qt::ItemIsEnabled), + _treeItemFlags(0) { } -AbstractTreeItem::~AbstractTreeItem() { -} - bool AbstractTreeItem::newChild(AbstractTreeItem *item) { int newRow = childCount(); emit beginAppendChilds(newRow, newRow); @@ -59,15 +57,17 @@ 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(); + return true; } @@ -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,9 +94,11 @@ void AbstractTreeItem::removeAllChilds() { while(childIter != _childItems.end()) { child = *childIter; childIter = _childItems.erase(childIter); - child->deleteLater(); + delete child; } emit endRemoveChilds(); + + checkForDeletion(); } bool AbstractTreeItem::reParent(AbstractTreeItem *newParent) { @@ -114,6 +117,8 @@ bool AbstractTreeItem::reParent(AbstractTreeItem *newParent) { parent()->_childItems.removeAt(oldRow); emit parent()->endRemoveChilds(); + parent()->checkForDeletion(); + setParent(newParent); bool success = newParent->newChild(this);