X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Fnetworkmodel.cpp;h=227382b947a21b447e3c1efdfb62f555e9d24a1d;hp=6d6792ca66a33c7cdec854000bf20408363e0c6b;hb=25bc72972586c19fb9a8c4a94d5845b2d16af121;hpb=a9b3edc811552b39dafb8fb01699490e5bcfb014 diff --git a/src/client/networkmodel.cpp b/src/client/networkmodel.cpp index 6d6792ca..227382b9 100644 --- a/src/client/networkmodel.cpp +++ b/src/client/networkmodel.cpp @@ -132,10 +132,7 @@ void BufferItem::attachIrcChannel(IrcChannel *ircChannel) { void BufferItem::ircChannelDestroyed() { emit dataChanged(); - for(int i = 0; i < childCount(); i++) { - emit childDestroyed(i); - removeChild(i); - } + removeAllChilds(); } QString BufferItem::bufferName() const { @@ -174,19 +171,21 @@ void BufferItem::join(IrcUser *ircUser) { void BufferItem::addUserToCategory(IrcUser *ircUser) { Q_ASSERT(_ircChannel); - + UserCategoryItem *categoryItem; int categoryId = UserCategoryItem::categoryFromModes(_ircChannel->userModes(ircUser)); if(!(categoryItem = qobject_cast(childById(qHash(categoryId))))) { categoryItem = new UserCategoryItem(categoryId, this); emit newChild(categoryItem); } - categoryItem->addUser(ircUser); } void BufferItem::part(IrcUser *ircUser) { - Q_UNUSED(ircUser); + if(!ircUser) + return; + + removeUserFromCategory(ircUser); emit dataChanged(2); } @@ -195,14 +194,20 @@ void BufferItem::removeUserFromCategory(IrcUser *ircUser) { IrcUserItem *userItem; for(int i = 0; i < childCount(); i++) { categoryItem = qobject_cast(child(i)); - if((userItem = qobject_cast(categoryItem->childById((quint64)ircUser)))) { - userItem->deleteLater(); - return; - } + categoryItem->removeChildById((quint64)ircUser); + if(categoryItem->childCount() == 0) + removeChild(i); } } void BufferItem::userModeChanged(IrcUser *ircUser) { + Q_ASSERT(_ircChannel); + + UserCategoryItem *categoryItem; + int categoryId = UserCategoryItem::categoryFromModes(_ircChannel->userModes(ircUser)); + if((categoryItem = qobject_cast(childById(qHash(categoryId))))) + return; // already in the right category; + removeUserFromCategory(ircUser); addUserToCategory(ircUser); } @@ -319,8 +324,6 @@ UserCategoryItem::UserCategoryItem(int category, AbstractTreeItem *parent) : PropertyMapItem(QStringList() << "categoryId", parent), _category(category) { - connect(this, SIGNAL(childDestroyed(int)), - this, SLOT(checkNoChilds())); } QString UserCategoryItem::categoryId() { @@ -330,11 +333,6 @@ QString UserCategoryItem::categoryId() { return QString("Users"); } -void UserCategoryItem::checkNoChilds() { - if(childCount() == 0) - deleteLater(); -} - quint64 UserCategoryItem::id() const { return qHash(_category); } @@ -382,7 +380,8 @@ void IrcUserItem::setNick(QString newNick) { emit dataChanged(0); } void IrcUserItem::ircUserDestroyed() { - deleteLater(); + parent()->removeChildById(id()); + // deleteLater(); } /*****************************************