aboutsummaryrefslogtreecommitdiffstats
path: root/libempathy-gtk/empathy-individual-widget.c
diff options
context:
space:
mode:
Diffstat (limited to 'libempathy-gtk/empathy-individual-widget.c')
-rw-r--r--libempathy-gtk/empathy-individual-widget.c81
1 files changed, 17 insertions, 64 deletions
diff --git a/libempathy-gtk/empathy-individual-widget.c b/libempathy-gtk/empathy-individual-widget.c
index 9e0b9d3a2..697eb257f 100644
--- a/libempathy-gtk/empathy-individual-widget.c
+++ b/libempathy-gtk/empathy-individual-widget.c
@@ -37,6 +37,7 @@
#include <champlain-gtk/champlain-gtk.h>
#endif
+#include <libempathy/empathy-contactinfo-utils.h>
#include <libempathy/empathy-utils.h>
#include <libempathy/empathy-location.h>
#include <libempathy/empathy-time.h>
@@ -141,64 +142,6 @@ details_set_up (EmpathyIndividualWidget *self)
gtk_widget_show (priv->details_spinner);
}
-typedef struct
-{
- const gchar *field_name;
- const gchar *title;
- gboolean linkify;
-} InfoFieldData;
-
-static InfoFieldData info_field_data[] =
-{
- { "fn", N_("Full name:"), FALSE },
- { "tel", N_("Phone number:"), FALSE },
- { "email", N_("E-mail address:"), TRUE },
- { "url", N_("Website:"), TRUE },
- { "bday", N_("Birthday:"), FALSE },
- { NULL, NULL }
-};
-
-static InfoFieldData *
-find_info_field_data (const gchar *field_name)
-{
- guint i;
-
- for (i = 0; info_field_data[i].field_name != NULL; i++)
- {
- if (tp_strdiff (info_field_data[i].field_name, field_name) == FALSE)
- return info_field_data + i;
- }
- return NULL;
-}
-
-static gint
-contact_info_field_name_cmp (const gchar *name1,
- const gchar *name2)
-{
- guint i;
-
- if (tp_strdiff (name1, name2) == FALSE)
- return 0;
-
- /* We use the order of info_field_data */
- for (i = 0; info_field_data[i].field_name != NULL; i++)
- {
- if (tp_strdiff (info_field_data[i].field_name, name1) == FALSE)
- return -1;
- if (tp_strdiff (info_field_data[i].field_name, name2) == FALSE)
- return +1;
- }
-
- return g_strcmp0 (name1, name2);
-}
-
-static gint
-contact_info_field_cmp (TpContactInfoField *field1,
- TpContactInfoField *field2)
-{
- return contact_info_field_name_cmp (field1->field_name, field2->field_name);
-}
-
static void
client_types_notify_cb (TpContact *contact,
GParamSpec *pspec,
@@ -207,6 +150,11 @@ client_types_notify_cb (TpContact *contact,
client_types_update (self);
}
+typedef struct {
+ EmpathyIndividualWidget *widget; /* weak */
+ TpContact *contact; /* owned */
+} DetailsData;
+
static void
update_weak_contact (EmpathyIndividualWidget *self)
{
@@ -275,12 +223,13 @@ details_update_show (EmpathyIndividualWidget *self,
guint n_rows = 0;
info = tp_contact_get_contact_info (contact);
- info = g_list_sort (info, (GCompareFunc) contact_info_field_cmp);
+ info = g_list_sort (info, (GCompareFunc) empathy_contact_info_field_cmp);
for (l = info; l != NULL; l = l->next)
{
TpContactInfoField *field = l->data;
- InfoFieldData *field_data;
+ gchar *title;
const gchar *value;
+ gboolean linkify;
GtkWidget *w;
if (field->field_value == NULL || field->field_value[0] == NULL)
@@ -288,15 +237,18 @@ details_update_show (EmpathyIndividualWidget *self,
value = field->field_value[0];
- field_data = find_info_field_data (field->field_name);
- if (field_data == NULL)
+ if (!empathy_contact_info_lookup_field (field->field_name,
+ NULL, &linkify))
{
DEBUG ("Unhandled ContactInfo field: %s", field->field_name);
continue;
}
/* Add Title */
- w = gtk_label_new (_(field_data->title));
+ title = empathy_contact_info_field_label (field->field_name,
+ field->parameters);
+ w = gtk_label_new (title);
+ g_free (title);
gtk_grid_attach (GTK_GRID (priv->grid_details),
w, 0, n_rows, 1, 1);
gtk_misc_set_alignment (GTK_MISC (w), 0, 0.5);
@@ -304,7 +256,8 @@ details_update_show (EmpathyIndividualWidget *self,
/* Add Value */
w = gtk_label_new (value);
- if (field_data->linkify == TRUE)
+
+ if (linkify == TRUE)
{
gchar *markup;