From ef97dad874c30d7e0586b3dcb98eed15d8987382 Mon Sep 17 00:00:00 2001 From: Marcus Eggenberger Date: Sun, 27 Jul 2008 14:39:56 +0200 Subject: [PATCH 1/1] fixed a bug where a quitting user could leave an empty entry in the nicklist --- src/client/networkmodel.cpp | 31 +------------------------------ src/client/networkmodel.h | 8 +++++--- 2 files changed, 6 insertions(+), 33 deletions(-) diff --git a/src/client/networkmodel.cpp b/src/client/networkmodel.cpp index 238dadbf..27bb3e2f 100644 --- a/src/client/networkmodel.cpp +++ b/src/client/networkmodel.cpp @@ -432,22 +432,8 @@ void ChannelBufferItem::ircChannelDestroyed() { removeAllChilds(); } -void ChannelBufferItem::ircUserDestroyed() { - // PRIVATE - IrcUser *ircUser = static_cast(sender()); - removeUserFromCategory(ircUser); - emit dataChanged(2); -} - void ChannelBufferItem::join(const QList &ircUsers) { addUsersToCategory(ircUsers); - - foreach(IrcUser *ircUser, ircUsers) { - if(!ircUser) - continue; - connect(ircUser, SIGNAL(destroyed()), this, SLOT(ircUserDestroyed())); - } - emit dataChanged(2); } @@ -657,26 +643,11 @@ IrcUserItem::IrcUserItem(IrcUser *ircUser, AbstractTreeItem *parent) _ircUser(ircUser) { setObjectName(ircUser->nick()); - // we don't need to handle the ircUser's destroyed signal since it's automatically removed - // by the IrcChannel::ircUserParted(); + connect(ircUser, SIGNAL(destroyed()), this, SLOT(ircUserDestroyed())); connect(ircUser, SIGNAL(nickSet(QString)), this, SIGNAL(dataChanged())); connect(ircUser, SIGNAL(awaySet(bool)), this, SIGNAL(dataChanged())); } -QString IrcUserItem::nickName() const { - if(_ircUser) - return _ircUser->nick(); - else - return QString(); -} - -bool IrcUserItem::isActive() const { - if(_ircUser) - return !_ircUser->isAway(); - else - return false; -} - QVariant IrcUserItem::data(int column, int role) const { switch(role) { case NetworkModel::ItemActiveRole: diff --git a/src/client/networkmodel.h b/src/client/networkmodel.h index 4dcb65cc..08ae4af0 100644 --- a/src/client/networkmodel.h +++ b/src/client/networkmodel.h @@ -190,7 +190,6 @@ public slots: private slots: void ircChannelDestroyed(); - void ircUserDestroyed(); private: IrcChannel *_ircChannel; @@ -233,13 +232,16 @@ class IrcUserItem : public PropertyMapItem { public: IrcUserItem(IrcUser *ircUser, AbstractTreeItem *parent); - QString nickName() const; - bool isActive() const; + inline QString nickName() const { return _ircUser ? _ircUser->nick() : QString(); } + inline bool isActive() const { return _ircUser ? !_ircUser->isAway() : false; } inline IrcUser *ircUser() { return _ircUser; } virtual QVariant data(int column, int role) const; virtual QString toolTip(int column) const; +private slots: + void ircUserDestroyed() { parent()->removeChild(this); } + private: QPointer _ircUser; }; -- 2.20.1