X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Fnetworkmodel.cpp;h=6e6397247322d3b3fdf1adc25a331f6c1dfbf1f2;hp=97deb997a40d68c081dbfa361ae9b9e168c1d9cc;hb=f824db0e31b54969e0b7fa0b5405b1e9173d482c;hpb=e1d4e2bf7c368d84d853f33e5f55a72945cc7f6a diff --git a/src/client/networkmodel.cpp b/src/client/networkmodel.cpp index 97deb997..6e639724 100644 --- a/src/client/networkmodel.cpp +++ b/src/client/networkmodel.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-08 by the Quassel Project * + * Copyright (C) 2005-09 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -39,7 +39,11 @@ NetworkItem::NetworkItem(const NetworkId &netid, AbstractTreeItem *parent) : PropertyMapItem(QList() << "networkName" << "currentServer" << "nickCount", parent), _networkId(netid) { + // DO NOT EMIT dataChanged() DIRECTLY IN NetworkItem + // use networkDataChanged() instead. Otherwise you will end up in a infinite loop + // as we "sync" the dataChanged() signals of NetworkItem and StatusBufferItem setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable); + connect(this, SIGNAL(networkDataChanged(int)), this, SIGNAL(dataChanged(int))); } QVariant NetworkItem::data(int column, int role) const { @@ -47,6 +51,7 @@ QVariant NetworkItem::data(int column, int role) const { case NetworkModel::BufferIdRole: case NetworkModel::BufferInfoRole: case NetworkModel::BufferTypeRole: + case NetworkModel::BufferActivityRole: if(childCount()) return child(0)->data(column, role); else @@ -84,6 +89,9 @@ BufferItem *NetworkItem::bufferItem(const BufferInfo &bufferInfo) { switch(bufferInfo.type()) { case BufferInfo::StatusBuffer: bufferItem = new StatusBufferItem(bufferInfo, this); + disconnect(this, SIGNAL(networkDataChanged(int)), this, SIGNAL(dataChanged(int))); + connect(this, SIGNAL(networkDataChanged(int)), bufferItem, SIGNAL(dataChanged(int))); + connect(bufferItem, SIGNAL(dataChanged(int)), this, SIGNAL(dataChanged(int))); break; case BufferInfo::ChannelBuffer: bufferItem = new ChannelBufferItem(bufferInfo, this); @@ -114,11 +122,11 @@ void NetworkItem::attachNetwork(Network *network) { connect(network, SIGNAL(ircUserAdded(IrcUser *)), this, SLOT(attachIrcUser(IrcUser *))); connect(network, SIGNAL(connectedSet(bool)), - this, SIGNAL(dataChanged())); + this, SIGNAL(networkDataChanged())); connect(network, SIGNAL(destroyed()), - this, SIGNAL(dataChanged())); + this, SIGNAL(networkDataChanged())); - emit dataChanged(); + emit networkDataChanged(); } void NetworkItem::attachIrcChannel(IrcChannel *ircChannel) { @@ -151,12 +159,12 @@ void NetworkItem::attachIrcUser(IrcUser *ircUser) { void NetworkItem::setNetworkName(const QString &networkName) { Q_UNUSED(networkName); - emit dataChanged(0); + emit networkDataChanged(0); } void NetworkItem::setCurrentServer(const QString &serverName) { Q_UNUSED(serverName); - emit dataChanged(1); + emit networkDataChanged(1); } @@ -282,8 +290,6 @@ QString BufferItem::toolTip(int column) const { StatusBufferItem::StatusBufferItem(const BufferInfo &bufferInfo, NetworkItem *parent) : BufferItem(bufferInfo, parent) { - Q_ASSERT(parent); - connect(parent, SIGNAL(dataChanged()), this, SIGNAL(dataChanged())); } QString StatusBufferItem::toolTip(int column) const {