" </popup>"
" <popup name='Group'>"
" <menuitem action='Rename'/>"
+ " <menuitem action='Remove'/>"
" </popup>"
"</ui>";
}
else if (group && strcmp (name, "Rename") == 0) {
}
+ else if (group && strcmp (name, "Remove") == 0) {
+ EmpathyContactList *list;
+
+ list = empathy_contact_list_store_get_list_iface (priv->store);
+ empathy_contact_list_remove_group (list, group);
+ }
g_free (group);
if (contact) {
}
}
+void
+empathy_contact_list_remove_group (EmpathyContactList *list,
+ const gchar *group)
+{
+ g_return_if_fail (EMPATHY_IS_CONTACT_LIST (list));
+ g_return_if_fail (group != NULL);
+
+ if (EMPATHY_CONTACT_LIST_GET_IFACE (list)->remove_group) {
+ EMPATHY_CONTACT_LIST_GET_IFACE (list)->remove_group (list, group);
+ }
+}
+
void (*rename_group) (EmpathyContactList *list,
const gchar *old_group,
const gchar *new_group);
+ void (*remove_group) (EmpathyContactList *list,
+ const gchar *group);
};
GType empathy_contact_list_get_type (void) G_GNUC_CONST;
void empathy_contact_list_rename_group (EmpathyContactList *list,
const gchar *old_group,
const gchar *new_group);
+void empathy_contact_list_remove_group (EmpathyContactList *list,
+ const gchar *group);
G_END_DECLS
&data);
}
+static void contact_manager_remove_group_foreach (McAccount *account,
+ EmpathyTpContactList *list,
+ const gchar *group)
+{
+ empathy_contact_list_remove_group (EMPATHY_CONTACT_LIST (list),
+ group);
+}
+
+static void
+contact_manager_remove_group (EmpathyContactList *manager,
+ const gchar *group)
+{
+ EmpathyContactManagerPriv *priv = GET_PRIV (manager);
+
+ g_return_if_fail (EMPATHY_IS_CONTACT_MANAGER (manager));
+
+ g_hash_table_foreach (priv->lists,
+ (GHFunc) contact_manager_remove_group_foreach,
+ (gpointer) group);
+}
+
static void
contact_manager_iface_init (EmpathyContactListIface *iface)
{
iface->add_to_group = contact_manager_add_to_group;
iface->remove_from_group = contact_manager_remove_from_group;
iface->rename_group = contact_manager_rename_group;
+ iface->remove_group = contact_manager_remove_group;
}
g_list_free (members);
}
+static void
+tp_contact_list_remove_group (EmpathyContactList *list,
+ const gchar *group)
+{
+ EmpathyTpGroup *tp_group;
+ GList *members;
+
+ g_return_if_fail (EMPATHY_IS_TP_CONTACT_LIST (list));
+
+ tp_group = tp_contact_list_find_group (EMPATHY_TP_CONTACT_LIST (list),
+ group);
+
+ if (!tp_group) {
+ return;
+ }
+
+ empathy_debug (DEBUG_DOMAIN, "remove group %s", group);
+
+ /* Remove all members of the group */
+ members = empathy_tp_group_get_members (tp_group);
+ empathy_tp_group_remove_members (tp_group, members, "");
+ empathy_tp_group_close (tp_group);
+
+ g_list_foreach (members, (GFunc) g_object_unref, NULL);
+ g_list_free (members);
+}
+
static void
tp_contact_list_iface_init (EmpathyContactListIface *iface)
{
iface->add_to_group = tp_contact_list_add_to_group;
iface->remove_from_group = tp_contact_list_remove_from_group;
iface->rename_group = tp_contact_list_rename_group;
+ iface->remove_group = tp_contact_list_remove_group;
}