X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Ftreemodel.cpp;h=4933f0d9ec941c82e4abea64644548d9e4415637;hp=3b18d036565ce071130e7aa82169a7f08fee26f1;hb=ff7c0776d68d9749b07f54a3e26c342dfb12f081;hpb=2704de43e8f98c030f013e686736f3e299b7d815 diff --git a/src/client/treemodel.cpp b/src/client/treemodel.cpp index 3b18d036..4933f0d9 100644 --- a/src/client/treemodel.cpp +++ b/src/client/treemodel.cpp @@ -24,6 +24,15 @@ #include #include +class RemoveChildLaterEvent : public QEvent { +public: + RemoveChildLaterEvent(AbstractTreeItem *child) : QEvent(QEvent::User), _child(child) {}; + inline AbstractTreeItem *child() { return _child; } +private: + AbstractTreeItem *_child; +}; + + /***************************************** * Abstract Items of a TreeModel *****************************************/ @@ -101,6 +110,25 @@ void AbstractTreeItem::removeAllChilds() { checkForDeletion(); } +void AbstractTreeItem::removeChildLater(AbstractTreeItem *child) { + Q_ASSERT(child); + QCoreApplication::postEvent(this, new RemoveChildLaterEvent(child)); +} + +void AbstractTreeItem::customEvent(QEvent *event) { + if(event->type() != QEvent::User) + return; + + event->accept(); + + RemoveChildLaterEvent *removeEvent = static_cast(event); + int childRow = _childItems.indexOf(removeEvent->child()); + if(childRow == -1) + return; + + removeChild(childRow); +} + bool AbstractTreeItem::reParent(AbstractTreeItem *newParent) { // currently we support only re parenting if the child that's about to be // adopted does not have any children itself.