diff options
author | Matúš Kukan <matus.kukan@gmail.com> | 2012-07-24 13:56:51 +0200 |
---|---|---|
committer | Matúš Kukan <matus.kukan@gmail.com> | 2012-07-24 23:33:09 +0200 |
commit | 9c6a6ec047261aab6b0e4b9ac4f3206aebc0d192 (patch) | |
tree | 2d2e4b0b7ec2b2d02d0669755015c4a23b2df5fa /tubes/source | |
parent | 5800c9aa3052aaa1429edb110e9b0291aa642cd7 (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.cxx | 15 |
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)) |