diff options
Diffstat (limited to 'src/contact.c')
-rw-r--r-- | src/contact.c | 46 |
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 | ||
66 | void | 75 | void |
76 | contact_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 | |||
90 | void | ||
67 | contact_update_info(const struct GNUNET_CHAT_Contact *contact) | 91 | contact_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 | } |