From 265ea7ef4abb3df7cf6d8e1c9f4c5bfe68763179 Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Fri, 2 Jul 2010 11:29:05 +0100 Subject: Re-enable changing individuals' groups This introduces a hacky function to return the individual for a given EmpathyContact, which should go away once we break the assumption that individuals are 1:1 with contacts. --- libempathy-gtk/empathy-contact-widget.c | 28 +++++++++++++++------------- libempathy/empathy-utils.c | 29 +++++++++++++++++++++++++++++ libempathy/empathy-utils.h | 1 + 3 files changed, 45 insertions(+), 13 deletions(-) diff --git a/libempathy-gtk/empathy-contact-widget.c b/libempathy-gtk/empathy-contact-widget.c index 024128151..82b638182 100644 --- a/libempathy-gtk/empathy-contact-widget.c +++ b/libempathy-gtk/empathy-contact-widget.c @@ -579,18 +579,15 @@ contact_widget_cell_toggled (GtkCellRendererToggle *cell, if (group) { - if (enabled) - { - empathy_contact_list_remove_from_group ( - EMPATHY_CONTACT_LIST (information->manager), information->contact, - group); - } - else + FolksIndividual *individual = folks_individual_from_empathy_contact ( + information->contact); + + if (individual) { - empathy_contact_list_add_to_group ( - EMPATHY_CONTACT_LIST (information->manager), information->contact, - group); + folks_groups_change_group (FOLKS_GROUPS (individual), group, !enabled); + g_object_unref (individual); } + g_free (group); } } @@ -797,6 +794,7 @@ contact_widget_button_group_clicked_cb (GtkButton *button, GtkTreeView *view; GtkListStore *store; GtkTreeIter iter; + FolksIndividual *individual; const gchar *group; view = GTK_TREE_VIEW (information->treeview_groups); @@ -810,9 +808,13 @@ contact_widget_button_group_clicked_cb (GtkButton *button, COL_ENABLED, TRUE, -1); - empathy_contact_list_add_to_group ( - EMPATHY_CONTACT_LIST (information->manager), information->contact, - group); + individual = folks_individual_from_empathy_contact (information->contact); + + if (individual) + { + folks_groups_change_group (FOLKS_GROUPS (individual), group, TRUE); + g_object_unref (individual); + } } static void diff --git a/libempathy/empathy-utils.c b/libempathy/empathy-utils.c index d80aad573..ddf56f708 100644 --- a/libempathy/empathy-utils.c +++ b/libempathy/empathy-utils.c @@ -43,6 +43,7 @@ #include "empathy-utils.h" #include "empathy-contact-manager.h" +#include "empathy-individual-manager.h" #include "empathy-dispatcher.h" #include "empathy-dispatch-operation.h" #include "empathy-idle.h" @@ -620,3 +621,31 @@ empathy_contact_from_folks_individual (FolksIndividual *individual) return contact; } + +/* TODO: This also needs to be eliminated, and is horrifically slow. */ +FolksIndividual * +folks_individual_from_empathy_contact (EmpathyContact *contact) +{ + EmpathyIndividualManager *manager; + FolksIndividual *individual = NULL; + GList *individuals, *l; + + manager = empathy_individual_manager_dup_singleton (); + individuals = empathy_individual_manager_get_members (manager); + + for (l = individuals; (l != NULL) && (individual == NULL); l = l->next) + { + FolksIndividual *i = FOLKS_INDIVIDUAL (l->data); + EmpathyContact *c = empathy_contact_from_folks_individual (i); + + if (c == contact) + individual = g_object_ref (i); + + g_object_unref (c); + } + + g_list_free (individuals); + g_object_unref (manager); + + return individual; +} diff --git a/libempathy/empathy-utils.h b/libempathy/empathy-utils.h index c6de97a8f..a07f575d8 100644 --- a/libempathy/empathy-utils.h +++ b/libempathy/empathy-utils.h @@ -93,6 +93,7 @@ void empathy_connect_new_account (TpAccount *account, TpConnectionPresenceType empathy_folks_presence_type_to_tp (FolksPresenceType type); gboolean empathy_folks_individual_contains_contact (FolksIndividual *individual); EmpathyContact * empathy_contact_from_folks_individual (FolksIndividual *individual); +FolksIndividual *folks_individual_from_empathy_contact (EmpathyContact *contact); G_END_DECLS -- cgit v1.2.3