aboutsummaryrefslogtreecommitdiff
path: root/src/client/QXmppMucManager.cpp
diff options
context:
space:
mode:
author0xd34df00d <0xd34df00d@gmail.com>2013-03-12 12:01:24 +0400
committer0xd34df00d <0xd34df00d@gmail.com>2013-03-12 12:01:24 +0400
commit3271cb0f62bb674a0ff1987ec08c49498edece62 (patch)
tree8ced4ffdf530deca157283856995091c67e56628 /src/client/QXmppMucManager.cpp
parent32c088eea838d81fb7c0c51ba4fd675efbdec327 (diff)
downloadqxmpp-3271cb0f62bb674a0ff1987ec08c49498edece62.tar.gz
Update self nick only if the nick change is successful.
Diffstat (limited to 'src/client/QXmppMucManager.cpp')
-rw-r--r--src/client/QXmppMucManager.cpp18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/client/QXmppMucManager.cpp b/src/client/QXmppMucManager.cpp
index 99de3f3a..1957b7e6 100644
--- a/src/client/QXmppMucManager.cpp
+++ b/src/client/QXmppMucManager.cpp
@@ -381,17 +381,17 @@ void QXmppMucRoom::setNickName(const QString &nickName)
if (nickName == d->nickName)
return;
- const bool wasJoined = isJoined();
- d->nickName = nickName;
- emit nickNameChanged(nickName);
-
// if we had already joined the room, request nickname change
- if (wasJoined) {
+ if (isJoined()) {
QXmppPresence packet = d->client->clientPresence();
- packet.setTo(d->ownJid());
+ packet.setTo(d->jid + "/" + nickName);
packet.setType(QXmppPresence::Available);
d->client->sendPacket(packet);
}
+ else {
+ d->nickName = nickName;
+ emit nickNameChanged(nickName);
+ }
}
/// Returns the "Full JID" of the given participant.
@@ -681,6 +681,12 @@ void QXmppMucRoom::_q_presenceReceived(const QXmppPresence &presence)
// check whether this was our own presence
if (jid == d->ownJid()) {
+ const QString newNick = presence.mucItem().nick();
+ if (!newNick.isEmpty() && newNick != d->nickName) {
+ d->nickName = newNick;
+ emit nickNameChanged(newNick);
+ return;
+ }
// check whether we were kicked
if (presence.mucStatusCodes().contains(307)) {