summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Smith <git@kismith.co.uk>2010-04-13 07:38:37 (GMT)
committerKevin Smith <git@kismith.co.uk>2010-04-13 07:38:37 (GMT)
commit59d973448045888d2ffa8e5cd949357d9c93ead3 (patch)
tree0d3426f6e7d2cccdc41a3d968a0062f687425e09 /Swiften/Roster
parent944d3e817919d26e3fbf92f3c9eab6bbe9a1d2ca (diff)
downloadswift-contrib-59d973448045888d2ffa8e5cd949357d9c93ead3.zip
swift-contrib-59d973448045888d2ffa8e5cd949357d9c93ead3.tar.bz2
Don't lose presence when receiving a roster item rename push
Resolves: #312
Diffstat (limited to 'Swiften/Roster')
-rw-r--r--Swiften/Roster/ContactRosterItem.cpp4
-rw-r--r--Swiften/Roster/ContactRosterItem.h1
-rw-r--r--Swiften/Roster/SetName.h37
3 files changed, 42 insertions, 0 deletions
diff --git a/Swiften/Roster/ContactRosterItem.cpp b/Swiften/Roster/ContactRosterItem.cpp
index 06f8536..39e96bd 100644
--- a/Swiften/Roster/ContactRosterItem.cpp
+++ b/Swiften/Roster/ContactRosterItem.cpp
@@ -22,6 +22,10 @@ ContactRosterItem::~ContactRosterItem() {
delete widget_;
}
+void ContactRosterItem::setName(const String& name) {
+ widget_->setText(name);
+}
+
StatusShow::Type ContactRosterItem::getStatusShow() {
return statusShow_;
}
diff --git a/Swiften/Roster/ContactRosterItem.h b/Swiften/Roster/ContactRosterItem.h
index 1c189f4..92b3056 100644
--- a/Swiften/Roster/ContactRosterItem.h
+++ b/Swiften/Roster/ContactRosterItem.h
@@ -32,6 +32,7 @@ class ContactRosterItem : public RosterItem {
void setStatusText(const String& status);
void setAvatarPath(const String& path);
const JID& getJID() const;
+ void setName(const String& name);
void show();
void hide();
diff --git a/Swiften/Roster/SetName.h b/Swiften/Roster/SetName.h
new file mode 100644
index 0000000..17bc2ea
--- /dev/null
+++ b/Swiften/Roster/SetName.h
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2010 Kevin Smith
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#pragma once
+
+#include "Swiften/JID/JID.h"
+#include "Swiften/Roster/RosterItemOperation.h"
+#include "Swiften/Roster/ContactRosterItem.h"
+
+namespace Swift {
+
+class RosterItem;
+
+class SetName : public RosterItemOperation {
+ public:
+ SetName(const String& name, const JID& jid, JID::CompareType compareType = JID::WithoutResource) : name_(name), jid_(jid), compareType_(compareType) {
+ }
+
+ virtual void operator() (RosterItem* item) const {
+ ContactRosterItem* contact = dynamic_cast<ContactRosterItem*>(item);
+ if (contact && contact->getJID().equals(jid_, compareType_)) {
+ contact->setName(name_);
+ }
+ }
+
+ private:
+ String name_;
+ JID jid_;
+ JID::CompareType compareType_;
+};
+
+}
+
+