aboutsummaryrefslogtreecommitdiff
path: root/src/contact.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/contact.c')
-rw-r--r--src/contact.c46
1 files changed, 34 insertions, 12 deletions
diff --git a/src/contact.c b/src/contact.c
index 08d273d..e87e87b 100644
--- a/src/contact.c
+++ b/src/contact.c
@@ -32,7 +32,8 @@ contact_create_info(struct GNUNET_CHAT_Contact *contact)
32 32
33 MESSENGER_ContactInfo* info = g_malloc(sizeof(MESSENGER_ContactInfo)); 33 MESSENGER_ContactInfo* info = g_malloc(sizeof(MESSENGER_ContactInfo));
34 34
35 info->name_labels = g_list_alloc(); 35 info->name_labels = NULL;
36 info->name_avatars = NULL;
36 37
37 GNUNET_CHAT_contact_set_user_pointer(contact, info); 38 GNUNET_CHAT_contact_set_user_pointer(contact, info);
38} 39}
@@ -45,7 +46,12 @@ contact_destroy_info(struct GNUNET_CHAT_Contact *contact)
45 if (!info) 46 if (!info)
46 return; 47 return;
47 48
48 g_list_free(info->name_labels); 49 if (info->name_labels)
50 g_list_free(info->name_labels);
51
52 if (info->name_avatars)
53 g_list_free(info->name_avatars);
54
49 g_free(info); 55 g_free(info);
50 56
51 GNUNET_CHAT_contact_set_user_pointer(contact, NULL); 57 GNUNET_CHAT_contact_set_user_pointer(contact, NULL);
@@ -57,13 +63,31 @@ contact_add_name_label_to_info(const struct GNUNET_CHAT_Contact *contact,
57{ 63{
58 MESSENGER_ContactInfo* info = GNUNET_CHAT_contact_get_user_pointer(contact); 64 MESSENGER_ContactInfo* info = GNUNET_CHAT_contact_get_user_pointer(contact);
59 65
60 if (!info) 66 if ((!info) || (!label))
61 return; 67 return;
62 68
69 const char *name = GNUNET_CHAT_contact_get_name(contact);
70 gtk_label_set_text(label, name? name : "");
71
63 info->name_labels = g_list_append(info->name_labels, label); 72 info->name_labels = g_list_append(info->name_labels, label);
64} 73}
65 74
66void 75void
76contact_add_name_avatar_to_info(const struct GNUNET_CHAT_Contact *contact,
77 HdyAvatar *avatar)
78{
79 MESSENGER_ContactInfo* info = GNUNET_CHAT_contact_get_user_pointer(contact);
80
81 if ((!info) || (!avatar))
82 return;
83
84 const char *name = GNUNET_CHAT_contact_get_name(contact);
85 hdy_avatar_set_text(avatar, name? name : "");
86
87 info->name_avatars = g_list_append(info->name_avatars, avatar);
88}
89
90void
67contact_update_info(const struct GNUNET_CHAT_Contact *contact) 91contact_update_info(const struct GNUNET_CHAT_Contact *contact)
68{ 92{
69 MESSENGER_ContactInfo* info = GNUNET_CHAT_contact_get_user_pointer(contact); 93 MESSENGER_ContactInfo* info = GNUNET_CHAT_contact_get_user_pointer(contact);
@@ -71,17 +95,15 @@ contact_update_info(const struct GNUNET_CHAT_Contact *contact)
71 if (!info) 95 if (!info)
72 return; 96 return;
73 97
98 GList* list;
74 const char *name = GNUNET_CHAT_contact_get_name(contact); 99 const char *name = GNUNET_CHAT_contact_get_name(contact);
75 100
76 GList* name_label = info->name_labels; 101 for (list = info->name_labels; list; list = list->next)
102 gtk_label_set_text(GTK_LABEL(list->data), name? name : "");
77 103
78 while (name_label) 104 if (!name)
79 { 105 return;
80 GtkLabel *label = GTK_LABEL(name_label->data);
81
82 if (label)
83 gtk_label_set_text(label, name? name : "");
84 106
85 name_label = name_label->next; 107 for (list = info->name_avatars; list; list = list->next)
86 } 108 hdy_avatar_set_text(HDY_AVATAR(list->data), name);
87} 109}