void IrcUser::setNick(const QString &nick) {
if(!nick.isEmpty() && nick != _nick) {
- QString oldnick(_nick);
_nick = nick;
updateObjectName();
emit nickSet(nick);
}
void IrcUser::updateObjectName() {
- QString oldName(objectName());
- setObjectName(QString::number(networkInfo->networkId()) + "/" + _nick);
- if(!oldName.isEmpty()) {
- emit renameObject(oldName, objectName());
+ QString newName = QString::number(networkInfo->networkId()) + "/" + _nick;
+ QString oldName = objectName();
+ if(oldName != newName) {
+ setObjectName(newName);
+ emit renameObject(oldName, newName);
}
}
-
void IrcUser::updateHostmask(const QString &mask) {
if(mask == hostmask())
return;
void IrcUser::joinChannel(IrcChannel *channel) {
Q_ASSERT(channel);
if(!_channels.contains(channel)) {
+ _channels.insert(channel);
channel->join(this);
connect(channel, SIGNAL(destroyed()), this, SLOT(channelDestroyed()));
- _channels.insert(channel);
emit channelJoined(channel->name());
}
}
}
void SignalProxy::objectRenamed(QByteArray classname, QString oldname, QString newname) {
- if(_syncSlave.contains(classname) && _syncSlave[classname].contains(oldname))
+ QMutexLocker locker(&slaveMutex);
+ if(_syncSlave.contains(classname) && _syncSlave[classname].contains(oldname) && oldname != newname)
_syncSlave[classname][newname] = _syncSlave[classname].take(oldname);
}
relay->setSynchronize(true);
if(sender->metaObject()->indexOfSignal(QMetaObject::normalizedSignature("renameObject(QString, QString)")) != -1)
- connect(sender, SIGNAL(renameObject(QString, QString)), this, SLOT(objectRenamed(QString, QString)));
+ connect(sender, SIGNAL(renameObject(QString, QString)), this, SLOT(objectRenamed(QString, QString)), Qt::DirectConnection);
QByteArray className(sender->metaObject()->className());
_syncSlave[className][sender->objectName()] = sender;
void SignalProxy::receivePeerSignal(QIODevice *sender, const QVariant &packedFunc) {
QVariantList params(packedFunc.toList());
+ QVariant call = params.takeFirst();
+ if(call.type() != QVariant::Int)
+ return handleSignal(call.toByteArray(), params);
+
// well yes we are locking code here and not only data.
// otherwise each handler would have to lock the data anyway. this leaves us on the safe side
// unable to forget a lock
QMutexLocker locker(&slaveMutex);
-
- QVariant call = params.takeFirst();
- if(call.type() != QVariant::Int)
- return handleSignal(call.toByteArray(), params);
switch(call.toInt()) {
case Sync:
qWarning() << "received Sync Call for Object" << receiver
<< "- no matching Slot for Signal:" << signalName;
return;
- }
+ }
+
int slotId = syncMap(receiver)[signalId];
if(!invokeSlot(receiver, slotId, params))
qWarning("SignalProxy::handleSync(): invokeMethod for \"%s\" failed ", methodName(receiver, slotId).constData());