From: Marcus Eggenberger Date: Sun, 20 Jan 2008 15:37:18 +0000 (+0000) Subject: bugfixinating X-Git-Tag: 0.2.0-alpha1~217 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=7df7429c009d2bea4c516e87f1ec4c956c722e09 bugfixinating --- diff --git a/src/client/networkmodel.cpp b/src/client/networkmodel.cpp index 48a6b8c4..227382b9 100644 --- a/src/client/networkmodel.cpp +++ b/src/client/networkmodel.cpp @@ -171,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); } @@ -192,10 +194,9 @@ 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); } } @@ -323,8 +324,6 @@ UserCategoryItem::UserCategoryItem(int category, AbstractTreeItem *parent) : PropertyMapItem(QStringList() << "categoryId", parent), _category(category) { - connect(this, SIGNAL(childRemoved(int)), - this, SLOT(checkNoChilds())); } QString UserCategoryItem::categoryId() { @@ -334,11 +333,6 @@ QString UserCategoryItem::categoryId() { return QString("Users"); } -void UserCategoryItem::checkNoChilds() { - if(childCount() == 0) - deleteLater(); -} - quint64 UserCategoryItem::id() const { return qHash(_category); } @@ -386,7 +380,8 @@ void IrcUserItem::setNick(QString newNick) { emit dataChanged(0); } void IrcUserItem::ircUserDestroyed() { - deleteLater(); + parent()->removeChildById(id()); + // deleteLater(); } /***************************************** diff --git a/src/client/networkmodel.h b/src/client/networkmodel.h index b1cc15f0..543e5e72 100644 --- a/src/client/networkmodel.h +++ b/src/client/networkmodel.h @@ -155,9 +155,6 @@ public: static int categoryFromModes(const QString &modes); -private slots: - void checkNoChilds(); - private: int _category; diff --git a/src/client/treemodel.cpp b/src/client/treemodel.cpp index 05b26357..929622d6 100644 --- a/src/client/treemodel.cpp +++ b/src/client/treemodel.cpp @@ -86,6 +86,20 @@ void AbstractTreeItem::removeChild(int row) { removeChild(defaultColumn(), row); } +void AbstractTreeItem::removeChildById(int column, const quint64 &id) { + if(!_childHash[column].contains(id)) + return; + + AbstractTreeItem *treeItem = _childHash[column][id]; + int row = _childItems[column].indexOf(treeItem); + Q_ASSERT(row >= 0); + removeChild(column, row); +} + +void AbstractTreeItem::removeChildById(const quint64 &id) { + removeChildById(defaultColumn(), id); +} + void AbstractTreeItem::removeAllChilds() { if(childCount() == 0) return; @@ -93,11 +107,12 @@ void AbstractTreeItem::removeAllChilds() { emit beginRemoveChilds(0, childCount() - 1); AbstractTreeItem *child; - foreach(int key, _childItems.keys()) { - QList::iterator iter = _childItems[key].begin(); - while(iter != _childItems[key].end()) { + foreach(int column, _childItems.keys()) { + QList::iterator iter = _childItems[column].begin(); + while(iter != _childItems[column].end()) { child = *iter; - iter = _childItems[key].erase(iter); + _childHash[column].remove(_childHash[column].key(child)); + iter = _childItems[column].erase(iter); disconnect(child, 0, this, 0); child->removeAllChilds(); child->deleteLater(); @@ -430,9 +445,6 @@ void TreeModel::appendChild(AbstractTreeItem *parent, AbstractTreeItem *child) { connect(child, SIGNAL(newChild(AbstractTreeItem *)), this, SLOT(newChild(AbstractTreeItem *))); -// connect(child, SIGNAL(childRemoved(int)), -// this, SLOT(childRemoved(int))); - connect(child, SIGNAL(beginRemoveChilds(int, int)), this, SLOT(beginRemoveChilds(int, int))); @@ -453,19 +465,6 @@ void TreeModel::endRemoveChilds() { endRemoveRows(); } -void TreeModel::childRemoved(int row) { - QModelIndex parent = indexByItem(static_cast(sender())); - beginRemoveRows(parent, row, row); - endRemoveRows(); -} - -void TreeModel::childsRemoved(int firstRow, int lastRow) { - QModelIndex parent = indexByItem(static_cast(sender())); - beginRemoveRows(parent, firstRow, lastRow); - endRemoveRows(); - -} - bool TreeModel::removeRow(int row, const QModelIndex &parent) { if(row > rowCount(parent)) return false; diff --git a/src/client/treemodel.h b/src/client/treemodel.h index a8c8a994..6439233f 100644 --- a/src/client/treemodel.h +++ b/src/client/treemodel.h @@ -43,6 +43,10 @@ public: void removeChild(int column, int row); void removeChild(int row); + + void removeChildById(int column, const quint64 &id); + void removeChildById(const quint64 &id); + void removeAllChilds(); virtual quint64 id() const; @@ -70,8 +74,6 @@ public: signals: void dataChanged(int column = -1); void newChild(AbstractTreeItem *); - void childRemoved(int row); - void childsRemoved(int firstRow, int lastRow); void beginRemoveChilds(int firstRow, int lastRow); void endRemoveChilds(); @@ -158,9 +160,6 @@ private slots: void beginRemoveChilds(int firstRow, int lastRow); void endRemoveChilds(); - void childRemoved(int row); - void childsRemoved(int firstRow, int lastRow); - protected: void appendChild(AbstractTreeItem *parent, AbstractTreeItem *child); diff --git a/src/common/signalproxy.cpp b/src/common/signalproxy.cpp index 2c443bbd..1127005c 100644 --- a/src/common/signalproxy.cpp +++ b/src/common/signalproxy.cpp @@ -644,7 +644,7 @@ void SignalProxy::handleInitRequest(QIODevice *sender, const QVariantList ¶m void SignalProxy::handleInitData(QIODevice *sender, const QVariantList ¶ms) { Q_UNUSED(sender) if(params.count() != 3) { - qWarning() << "SignalProxy::handleInitRequest() received initRequest with invalid param Count:" + qWarning() << "SignalProxy::handleInitData() received initData with invalid param Count:" << params; return; } @@ -654,13 +654,13 @@ void SignalProxy::handleInitData(QIODevice *sender, const QVariantList ¶ms) QVariantMap propertyMap(params[2].toMap()); if(!_syncSlave.contains(className)) { - qWarning() << "SignalProxy::handleInitRequest() received initRequest for unregistered Class:" + qWarning() << "SignalProxy::handleInitData() received initData for unregistered Class:" << className; return; } if(!_syncSlave[className].contains(objectName)) { - qWarning() << "SignalProxy::handleInitRequest() received initRequest for unregistered Object:" + qWarning() << "SignalProxy::handleInitData() received initData for unregistered Object:" << className << objectName; return; } diff --git a/version.inc b/version.inc index f5426b06..c5b41cb0 100644 --- a/version.inc +++ b/version.inc @@ -5,7 +5,7 @@ quasselVersion = "0.2.0-pre"; quasselDate = "2008-01-20"; - quasselBuild = 362; + quasselBuild = 363; //! Minimum client build number the core needs clientBuildNeeded = 358;