static void contact_manager_set_blocked (EmpathyContactList *manager, EmpathyContact *contact, gboolean blocked, gboolean abusive) { EmpathyContactManagerPriv *priv = GET_PRIV (manager); EmpathyContactList *list; TpConnection *connection; g_return_if_fail (EMPATHY_IS_CONTACT_MANAGER (manager)); connection = empathy_contact_get_connection (contact); list = g_hash_table_lookup (priv->lists, connection); if (list != NULL) { empathy_contact_list_set_blocked (list, contact, blocked, abusive); } }
static void empathy_contact_block_menu_item_toggled (GtkCheckMenuItem *item, EmpathyContact *contact) { static guint block_signal = 0; EmpathyContactManager *manager; gboolean blocked, abusive; if (block_signal > 0) return; blocked = gtk_check_menu_item_get_active (item); if (blocked) { /* confirm the user really wishes to block the contact */ GtkWidget *parent; GdkPixbuf *avatar; /* gtk_menu_get_attach_widget () doesn't behave properly here * for some reason */ parent = g_object_get_data ( G_OBJECT (gtk_widget_get_parent (GTK_WIDGET (item))), "window"); avatar = empathy_pixbuf_avatar_from_contact_scaled (contact, 48, 48); if (!empathy_block_contact_dialog_show (GTK_WINDOW (parent), contact, avatar, &abusive)) return; } manager = empathy_contact_manager_dup_singleton (); empathy_contact_list_set_blocked (EMPATHY_CONTACT_LIST (manager), contact, blocked, abusive); g_object_unref (manager); /* update the toggle with the blocked status */ block_signal++; gtk_check_menu_item_set_active (item, blocked); block_signal--; }