summaryrefslogtreecommitdiff
path: root/tubes/source
diff options
context:
space:
mode:
authorMatúš Kukan <matus.kukan@gmail.com>2012-07-24 13:56:51 +0200
committerMatúš Kukan <matus.kukan@gmail.com>2012-07-24 23:33:09 +0200
commit9c6a6ec047261aab6b0e4b9ac4f3206aebc0d192 (patch)
tree2d2e4b0b7ec2b2d02d0669755015c4a23b2df5fa /tubes/source
parent5800c9aa3052aaa1429edb110e9b0291aa642cd7 (diff)
tubes: keep contacts dialog updated on contacts' presence changes
- make the dialog - TubeContacts static pointer, so there is only one Change-Id: I12f256bebc27ba31a82082d7107066de8079893c
Diffstat (limited to 'tubes/source')
-rw-r--r--tubes/source/contact-list.cxx15
1 files changed, 15 insertions, 0 deletions
diff --git a/tubes/source/contact-list.cxx b/tubes/source/contact-list.cxx
index 0d4680358fd3..78f84b534417 100644
--- a/tubes/source/contact-list.cxx
+++ b/tubes/source/contact-list.cxx
@@ -92,6 +92,15 @@ tb_contact_is_online (TpContact *contact)
}
}
+static void presence_changed_cb( TpContact* /* contact */,
+ guint /* type */,
+ gchar* /* status */,
+ gchar* /* message */,
+ gpointer pContactList )
+{
+ reinterpret_cast<ContactList*> (pContactList)->sigContactListChanged();
+}
+
AccountContactPairV ContactList::getContacts()
{
GList *accounts;
@@ -121,6 +130,12 @@ AccountContactPairV ContactList::getContacts()
{
TpContact *contact =
reinterpret_cast<TpContact *>(g_ptr_array_index (contacts, i));
+ if (maRegistered.find (contact) == maRegistered.end())
+ {
+ maRegistered.insert (contact);
+ g_signal_connect (contact, "presence-changed",
+ G_CALLBACK (presence_changed_cb), this );
+ }
if (contact != self &&
tb_contact_is_online (contact))