void empathy_contact_list_store_set_show_groups (EmpathyContactListStore *store, gboolean show_groups) { EmpathyContactListStorePriv *priv; GList *contacts, *l; g_return_if_fail (EMPATHY_IS_CONTACT_LIST_STORE (store)); priv = GET_PRIV (store); if (priv->show_groups == show_groups) { return; } priv->show_groups = show_groups; /* Remove all contacts and add them back, not optimized but that's the * easy way :) */ gtk_tree_store_clear (GTK_TREE_STORE (store)); contacts = empathy_contact_list_get_members (priv->list); for (l = contacts; l; l = l->next) { contact_list_store_members_changed_cb (priv->list, l->data, NULL, 0, NULL, TRUE, store); g_object_unref (l->data); } g_list_free (contacts); g_object_notify (G_OBJECT (store), "show-groups"); }
void empathy_contact_list_store_set_show_offline (EmpathyContactListStore *store, gboolean show_offline) { EmpathyContactListStorePriv *priv; GList *contacts, *l; gboolean show_active; g_return_if_fail (EMPATHY_IS_CONTACT_LIST_STORE (store)); priv = GET_PRIV (store); priv->show_offline = show_offline; show_active = priv->show_active; /* Disable temporarily. */ priv->show_active = FALSE; contacts = empathy_contact_list_get_members (priv->list); for (l = contacts; l; l = l->next) { contact_list_store_contact_update (store, l->data); g_object_unref (l->data); } g_list_free (contacts); /* Restore to original setting. */ priv->show_active = show_active; g_object_notify (G_OBJECT (store), "show-offline"); }
static void contact_list_store_finalize (GObject *object) { EmpathyContactListStorePriv *priv = GET_PRIV (object); GList *contacts, *l; contacts = empathy_contact_list_get_members (priv->list); for (l = contacts; l; l = l->next) { g_signal_handlers_disconnect_by_func (l->data, G_CALLBACK (contact_list_store_contact_updated_cb), object); g_object_unref (l->data); } g_list_free (contacts); g_signal_handlers_disconnect_by_func (priv->list, G_CALLBACK (contact_list_store_members_changed_cb), object); g_signal_handlers_disconnect_by_func (priv->list, G_CALLBACK (contact_list_store_groups_changed_cb), object); g_object_unref (priv->list); if (priv->inhibit_active) { g_source_remove (priv->inhibit_active); } G_OBJECT_CLASS (empathy_contact_list_store_parent_class)->finalize (object); }
static gboolean contact_list_store_iface_setup (gpointer user_data) { EmpathyContactListStore *store = user_data; EmpathyContactListStorePriv *priv = GET_PRIV (store); GList *contacts, *l; /* Signal connection. */ g_signal_connect (priv->list, "members-changed", G_CALLBACK (contact_list_store_members_changed_cb), store); g_signal_connect (priv->list, "groups-changed", G_CALLBACK (contact_list_store_groups_changed_cb), store); /* Add contacts already created. */ contacts = empathy_contact_list_get_members (priv->list); for (l = contacts; l; l = l->next) { contact_list_store_members_changed_cb (priv->list, l->data, NULL, 0, NULL, TRUE, store); g_object_unref (l->data); } g_list_free (contacts); return FALSE; }
static EmpathyContact * contact_manager_lookup_contact (EmpathyContactManager *manager, const gchar *account_name, const gchar *contact_id) { EmpathyContact *retval = NULL; GList *members, *l; /* XXX: any more efficient way to do this (other than having to build * and maintain a hash)? */ members = empathy_contact_list_get_members ( EMPATHY_CONTACT_LIST (manager)); for (l = members; l; l = l->next) { EmpathyContact *contact = l->data; TpAccount *account = empathy_contact_get_account (contact); const gchar *id_cur; const gchar *name_cur; id_cur = empathy_contact_get_id (contact); name_cur = tp_proxy_get_object_path (TP_PROXY (account)); if (!tp_strdiff (contact_id, id_cur) && !tp_strdiff (account_name, name_cur)) { retval = contact; } g_object_unref (contact); } g_list_free (members); return retval; }
static void contact_manager_get_members_foreach (TpConnection *connection, EmpathyTpContactList *list, GList **contacts) { GList *l; l = empathy_contact_list_get_members (EMPATHY_CONTACT_LIST (list)); *contacts = g_list_concat (*contacts, l); }
GtkWidget * empathy_contact_add_menu_item_new (EmpathyContact *contact) { GtkWidget *item; GtkWidget *image; EmpathyContactManager *manager; TpConnection *connection; GList *l, *members; gboolean found = FALSE; EmpathyContactListFlags flags; g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL); if (!empathy_contact_manager_initialized ()) { return NULL; } manager = empathy_contact_manager_dup_singleton (); connection = empathy_contact_get_connection (contact); flags = empathy_contact_manager_get_flags_for_connection (manager, connection); if (!(flags & EMPATHY_CONTACT_LIST_CAN_ADD)) { return NULL; } members = empathy_contact_list_get_members (EMPATHY_CONTACT_LIST (manager)); for (l = members; l; l = l->next) { if (!found && empathy_contact_equal (l->data, contact)) { found = TRUE; /* we keep iterating so that we don't leak contact * refs */ } g_object_unref (l->data); } g_list_free (members); g_object_unref (manager); if (found) { return NULL; } item = gtk_image_menu_item_new_with_mnemonic (_("_Add Contact…")); image = gtk_image_new_from_icon_name (GTK_STOCK_ADD, GTK_ICON_SIZE_MENU); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image); g_signal_connect (item, "activate", G_CALLBACK (empathy_contact_add_menu_item_activated), contact); return item; }